当我在dev中运行这段代码时,我有段错误。 in“*(ap + j)= new int [10];”dev dev中的SIGSEGV(段错误)错误
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;
}
当我在dev中运行这段代码时,我有段错误。 in“*(ap + j)= new int [10];”dev dev中的SIGSEGV(段错误)错误
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;
}
你永远不会为ap
分配任何内存。例如:
int** ap;
ap = new int*[10];
是你想要的。
谢谢,就是它! –
不客气,请接受答案,如果它帮助你。 –
您正在为数据分配内存,但没有为指针数组分配内存。您可以将ap
的声明更改为int* ap[10];
。
在*(ap + j) = new int[10];
您取消引用尚未分配的内存位置。首先你必须自己分配变量ap
。
你这里的问题是*(AP + J)=新...
如果你的位置“AP + J”分配内存,问题是ap + j
还不是因为你一个有效的内存位置尚未初始化。所以当你将j添加到ap时,你会进入未初始化的内存空间,从而导致你的分段错误。
使用STL容器代替所有这些。 – Kunal
我知道其他方式可能会工作,但我需要运行它! –
然后调试它! –