读书人

们帮帮忙嵌套的指针分配或初始化异常

发布时间: 2012-03-25 20:55:16 作者: rapoo

大虾们帮帮忙,嵌套的指针分配或初始化错误
大虾们帮忙看一下这段程序:
class C_z
{
public:
int z1;
int *z2;
};

class C_x
{
public:
C_z *x1;
C_z *x2;
};

class C_y
{
public:
C_x *y1;
C_x *y2;
};

int main(int argc, char* argv[])
{
C_y *tmpy;
tmpy = (C_y*)malloc(sizeof(C_y));
tmpy-> y1 = NULL;
tmpy-> y1-> x1 = NULL;
return 0;
}
运行到 tmpy-> y1-> x1 = NULL;时就会出错,因为跟代码时发现 tmpy-> y1-> x1是提示如下的CXX0030: Error: expression cannot be evaluated 这是什么意思呢?

但如果之前加上
C_x *tmpx;
tmpx = (C_x*)malloc(sizeof(C_x));
tmpy-> y1 = tmpx;
就正确,这是为什么呢?
要做的程序中嵌套很多,逐个这样赋值太麻烦了,有什么简单的办法吗?


[解决办法]
tmpy-> y1 = NULL;
这时tmpy-y1是一个NULL指针,

tmpy-> y1-> x1 = NULL;
这里对NULL指针调用,对NULL指针调用,程序就会发生运行时错误。
[解决办法]
mpy-> y1只是个指针,而且指向NULL,并没有让他指向对应的对象,当然不能用mpy-> y1-> x1 了。。
[解决办法]
tmpy-> y1 = NULL;

这里已经对tmpy-> y1置NULL了,也就是你告诉编译器tmpy-> y1哪也不指向.
而在后面又去调用tmpy-> y1-> x1,当然是出错的了,自相矛盾

读书人网 >C++

热点推荐