2011-09-15 63 views
0

这里的目标是让指针的工作方式类似于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 Fault,而在Memory Corruption(我认为是线程的巨大日志输出)之间会有所不同。

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

回答

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

这会导致数组溢出。 mymatrix [100]不是mymatrix阵列的一部分。写入它的结果是未定义的。它本身“正常工作”的原因是,没有其他数据结构可以让你破坏。 for循环应该以开始。

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

一般情况下使用< = in for循环条件不是惯用的c。如果你发现自己在使用它,你应该问问自己,如果你真的做对了。阵列超限有时很难找到。如果你在linux上,你可以使用像valgrind这样的工具来帮助你识别这个错误和其他错误。

+0

哇,事实证明我的整个代码中我的数组定义是错的。我可以发誓A [5]给了我一个从0到5的数组。=) – Malabarba