#include <iostream>
using namespace std;
class OBJ {
int i;
public:
void set_i(int x) { i = x; }
void out_i() { cout << i << "\n"; }
};
void f(OBJ x)
{
x.out_i();
x.set_i(100); //修改的只是对象 o 的副本
x.out_i();
}
int main()
{
OBJ o;
o.set_i(10);
f(o); //传递对象 o 到函数 f() 中
o.out_i();
return 0;
}
$ ./passobj
10
100
10
#include <iostream>
using namespace std;
class myclass {
int val;
public:
myclass(int i) { val = i; cout << "Constructing\n"; }
~myclass() { cout << "Destructing\n"; }
int getval() { return val; }
};
void display (myclass ob)
{
cout << ob.getval() << "\n";
}
int main()
{
myclass a(10);
display(a);
return 0;
}
$ ./passproblem
Constructing
10
Destructing
Destructing
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
class myclass {
char *p;
public:
myclass(const char *str);
~myclass();
int show() { cout << p << "\n"; }
};
myclass::myclass(const char *str)
{
cout << "Allocating p\n";
p = (char *)malloc (100);
strcpy(p, str);
}
myclass::~myclass()
{
cout << "Freeing p\n";
free (p);
}
void display(myclass ob)
{
cout << ob.show() << "\n";
}
int main()
{
myclass a("hello world");
display(a);
return 0;
}
[beyes@beyes cpp]$ ./passpb
Allocating p
hello world
134520064
Freeing p
Freeing p
*** glibc detected *** ./passpb: double free or corruption (top): 0x09b9f008 ***
======= Backtrace: =========
/lib/libc.so.6(+0x712b5)[0xd3d2b5]
./passpb[0x804875f]
./passpb[0x80487e3]
/lib/libc.so.6(__libc_start_main+0xf3)[0xce5413]
./passpb[0x8048661]
======= Memory map: ========
00110000-00138000 r-xp 00000000 fd:01 1966809 /lib/libm-2.14.so
00138000-00139000 r--p 00028000 fd:01 1966809 /lib/libm-2.14.so
00139000-0013a000 rw-p 00029000 fd:01 1966809 /lib/libm-2.14.so
001d6000-001f3000 r-xp 00000000 fd:01 1966794 /lib/ld-2.14.so
001f3000-001f4000 r--p 0001d000 fd:01 1966794 /lib/ld-2.14.so
001f4000-001f5000 rw-p 0001e000 fd:01 1966794 /lib/ld-2.14.so
00276000-00277000 r-xp 00000000 00:00 0 [vdso]
0076e000-0084d000 r-xp 00000000 fd:01 660656 /usr/lib/libstdc++.so.6.0.16
0084d000-0084e000 ---p 000df000 fd:01 660656 /usr/lib/libstdc++.so.6.0.16
0084e000-00852000 r--p 000df000 fd:01 660656 /usr/lib/libstdc++.so.6.0.16
00852000-00853000 rw-p 000e3000 fd:01 660656 /usr/lib/libstdc++.so.6.0.16
00853000-0085a000 rw-p 00000000 00:00 0
00b6c000-00b88000 r-xp 00000000 fd:01 1967785 /lib/libgcc_s-4.6.0-20110603.so.1
00b88000-00b89000 rw-p 0001b000 fd:01 1967785 /lib/libgcc_s-4.6.0-20110603.so.1
00ccc000-00e51000 r-xp 00000000 fd:01 1966801 /lib/libc-2.14.so
00e51000-00e52000 ---p 00185000 fd:01 1966801 /lib/libc-2.14.so
00e52000-00e54000 r--p 00185000 fd:01 1966801 /lib/libc-2.14.so
00e54000-00e55000 rw-p 00187000 fd:01 1966801 /lib/libc-2.14.so
00e55000-00e58000 rw-p 00000000 00:00 0
08048000-08049000 r-xp 00000000 fd:02 1189533 /home/beyes/cpp/passpb
08049000-0804a000 rw-p 00000000 fd:02 1189533 /home/beyes/cpp/passpb
09b9f000-09bc0000 rw-p 00000000 00:00 0 [heap]
b77be000-b77c1000 rw-p 00000000 00:00 0
b77d7000-b77da000 rw-p 00000000 00:00 0
bf958000-bf979000 rw-p 00000000 00:00 0 [stack]
Aborted (core dumped)
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |