2013-10-26 60 views
-1

当我在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; 
} 
+1

使用STL容器代替所有这些。 – Kunal

+0

我知道其他方式可能会工作,但我需要运行它! –

+0

然后调试它! –

回答

0

你永远不会为ap分配任何内存。例如:

int** ap; 
ap = new int*[10]; 

是你想要的。

+0

谢谢,就是它! –

+0

不客气,请接受答案,如果它帮助你。 –

0

您正在为数据分配内存,但没有为指针数组分配内存。您可以将ap的声明更改为int* ap[10];

0

*(ap + j) = new int[10];您取消引用尚未分配的内存位置。首先你必须自己分配变量ap

0

你这里的问题是*(AP + J)=新...

如果你的位置“AP + J”分配内存,问题是ap + j还不是因为你一个有效的内存位置尚未初始化。所以当你将j添加到ap时,你会进入未初始化的内存空间,从而导致你的分段错误。