-1

当我在开发中运行此代码时,我遇到了分段错误。在“*(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;
}
4

4 回答 4

0

您正在为数据分配内存,但没有为指针数组分配内存。更改 to 的声明可能就足够apint* ap[10];

于 2013-10-26T19:53:05.290 回答
0

您永远不会为ap. 就像是:

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

是你想要的。

于 2013-10-26T19:53:18.810 回答
0

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

于 2013-10-26T19:53:43.673 回答
0

您的问题是 *(ap +j) = new ...

在为位置“ap+j”分配内存的地方,问题ap + j还不是有效的内存位置,因为您尚未初始化 ap。因此,当您将 j 添加到 ap 时,您会进入未初始化的内存空间,因此会出现分段错误。

于 2013-10-26T19:56:16.097 回答