Posted on 2005-12-06 09:34
小明 閱讀(2492)
評論(12) 編輯 收藏 引用 所屬分類:
C/C++
這是小明我自編的題目。
1.請在不運行程序的情況下,說出下面的程序運行后會崩潰么?如果是,在哪一行。
1 #include <stdio.h>
2 #include <memory.h>
3 class Test
4 {
5 public:
6 Test()
7 {
8 memset(this,0,sizeof(*this));
9 }
10 int s;
11 void test()
12 {
13 printf("test()\n");
14 }
15 void test1()
16 {
17 printf("test1():%d\n",this->s);
18 }
19 virtual void test2()
20 {
21 printf("test2()\n");
22 }
23 };
24
25 int main()
26 {
27 Test *s;
28 s->test();
29 s->test2();
30 s->test1();
31 return 0;
32 }
2 .修改一下,又是在哪一行呢?
1 #include <stdio.h>
2 #include <memory.h>
3 class Test
4 {
5 public:
6 Test()
7 {
8 memset(this,0,sizeof(*this));
9 }
10 int s;
11 void test()
12 {
13 printf("test()\n");
14 }
15 void test1()
16 {
17 printf("test1():%d\n",this->s);
18 }
19 virtual void test2()
20 {
21 printf("test2()\n");
22 }
23 };
24
25 int main()
26 {
27 Test *s = new Test();
28 s->test();
29 s->test1();
30 s->test2();
31 return 0;
32 }
3.再修改一下,情況會如何呢?
1 #include <stdio.h>
2 #include <memory.h>
3 class Test
4 {
5 public:
6 Test()
7 {
8 memset(this,0,sizeof(*this));
9 }
10 int s;
11 void test()
12 {
13 printf("test()\n");
14 }
15 void test1()
16 {
17 printf("test1():%d\n",this->s);
18 }
19 virtual void test2()
20 {
21 printf("test2()\n");
22 }
23 };
24
25 int main()
26 {
27 Test s ;
28 s.test();
29 s.test1();
30 s.test2();
31 return 0;
32 }
最后說一下答案吧
第一題是在29行,第二題在30行,最后一題不報錯。
如果你不知道為什么,建議看看<<Inside the c++ Object Model>>