开发 C++ 中的 SIGSEGV(分段错误)错误
Posted
技术标签:
【中文标题】开发 C++ 中的 SIGSEGV(分段错误)错误【英文标题】:SIGSEGV(segmentation fault) error in dev c++ 【发布时间】:2013-10-26 19:47:43 【问题描述】:当我在 dev 中运行此代码时,我遇到了分段错误。在“*(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;
【问题讨论】:
使用 STL 容器代替所有这些。 我知道其他方法可能有效,但我需要运行它! 还...以及调试行(打印或其他)cmets 总是有帮助:) 【参考方案1】:您永远不会为ap
分配任何内存。比如:
int** ap;
ap = new int*[10];
是你想要的。
【讨论】:
【参考方案2】:您正在为数据分配内存,但没有为指针数组分配内存。将ap
的声明更改为int* ap[10];
可能就足够了。
【讨论】:
【参考方案3】:在*(ap + j) = new int[10];
中,您取消引用尚未分配的内存位置。首先你必须自己分配变量ap
。
【讨论】:
【参考方案4】:你的问题是 *(ap +j) = new ...
在为位置“ap+j”分配内存的地方,问题是ap + j
还不是有效的内存位置,因为您还没有初始化 ap。因此,当您将 j 添加到 ap 时,您会进入未初始化的内存空间,因此会出现分段错误。
【讨论】:
以上是关于开发 C++ 中的 SIGSEGV(分段错误)错误的主要内容,如果未能解决你的问题,请参考以下文章
SIGSEGV,分段错误。 while printf() 数组索引的值