首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-25 
大虾们帮帮忙,嵌套的指针分配或初始化错误大虾们帮忙看一下这段程序:classC_z{public:intz1int*z2}clas

大虾们帮帮忙,嵌套的指针分配或初始化错误
大虾们帮忙看一下这段程序:
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,当然是出错的了,自相矛盾

热点排行