当我在开发中运行此代码时,我遇到了分段错误。在“*(ap + j) = new int[10];”行中
int main(){
int** ap;
for(int j=0;j<10;j++){
*(ap + j) = new int[10];
for(int k=0;k<10;k++){
*(*(ap+j) +k) = 1;
}
}
return 0;
}
您正在为数据分配内存,但没有为指针数组分配内存。更改 to 的声明可能就足够ap
了int* ap[10];
。
您永远不会为ap
. 就像是:
int** ap;
ap = new int*[10];
是你想要的。
在*(ap + j) = new int[10];
您取消引用尚未分配的内存位置。首先,您必须自己分配变量ap
。
您的问题是 *(ap +j) = new ...
在为位置“ap+j”分配内存的地方,问题ap + j
还不是有效的内存位置,因为您尚未初始化 ap。因此,当您将 j 添加到 ap 时,您会进入未初始化的内存空间,因此会出现分段错误。