分段错误和内存损坏,指针指针数组

时间:2011-09-15 19:26:55

标签: c pointers segmentation-fault memory-corruption

这里的目标是使指针像2D矩阵一样工作。我已经测试了以下代码来创建指针和整数指针数组。它编译并运行良好。 (这是一个简化版本,我尝试将值分配/打印到mymatrix[x][y]并且工作正常。)

#include <iostream>
int **mymatrix;

int main(int argc, char* args[]){

  mymatrix = new  int*[100] ;
  for( int n = 0; n <= 100; n++ ){
    mymatrix[n] = new int[200] ;
  }
  return 0;
}

但是,只要我将此代码段复制到另一个代码(以前运行正常),代码仍会编译但无法运行。没有与此代码段相关的错误或警告。这很奇怪,因为mymatrix甚至没有与代码的其余部分交互(在被定义之后它再也没有被使用过)。

中断执行的实际错误因尝试加载字体时崩溃,尝试分配值时Segmentation FaultMemory Corruption(我认为是线程的巨大日志输出)而异)。

我可以粘贴较大代码的部分,但我几乎确信这一切都在发生,因为我没有以正确的方式定义这个指针。我在这里做些笨拙或不安全的事吗?或者我应该开始查看我的其余代码中的错误吗?

1 个答案:

答案 0 :(得分:2)

for( int n = 0; n <= 100; n++ )

这会导致数组溢出。 mymatrix [100]不是mymatrix阵列的一部分。写入它的结果是不确定的。它本身“工作正常”的原因是没有其他数据结构可供您使用。 for循环应该从。

开始
for( int n = 0; n < 100; n++ )

通常,使用&lt; = in for循环条件不是惯用的c。如果你发现自己在使用它,你应该问问自己,你是否真的在做正确的事情。阵列溢出有时很难找到。如果您使用的是Linux,则可以使用valgrind之类的工具来帮助您识别此错误和其他错误。