说我定义以下结构并具有以下代码:

struct PVS{
    int* values;
};

struct PVS** pvs = (struct PVS**) malloc(9 * sizeof(struct PVS*));
int i;
for(i = 0; i < 9; i++){
    pvs[i] = (struct PVS*) malloc(9 * sizeof(struct PVS));
}

int j,k;
for(j = 0; j < 9; j++){
    for(k = 0; k < 9; k++){
        int* val = pvs[j][k].values;
    }
}


如果我尝试访问pvs [j] [k],会发生什么?编译器会抛出什么类型的错误?

最佳答案

没有错误发生,但是values成员未初始化,因此val将具有任意内容。您正在调用所谓的未定义行为(UB)。确实有可能发生任何事情,并且不会显示任何错误-访问val后,您很幸运会崩溃。

您最好创建可以构造一个PVS的构造函数,而另一个构造函数可以构造任意数量的维度。这样,您就可以避免一遍又一遍地重复相同的代码。您实际上将实现一个多维矢量容器。

09-30 09:47