说我定义以下结构并具有以下代码:
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的构造函数,而另一个构造函数可以构造任意数量的维度。这样,您就可以避免一遍又一遍地重复相同的代码。您实际上将实现一个多维矢量容器。