【问题标题】:SIGSEGV(segmentation fault) error in dev c++开发 C++ 中的 SIGSEGV(分段错误)错误
【发布时间】: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 总是有帮助:)

标签: c++ dev-c++


【解决方案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 时,您会进入未初始化的内存空间,因此会出现分段错误。

        【讨论】:

          猜你喜欢
          • 2020-06-26
          • 2012-06-01
          • 1970-01-01
          • 2011-08-21
          • 1970-01-01
          • 2020-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多