C阵列内存分配

时间:2013-11-22 04:51:41

标签: c arrays memory-management static malloc

我是C的新手,有些东西在困扰我......

我宣布了一个typedef:

    typedef struct{
        double
            real,
            img;
    }complex;

并且,在函数内部,我声明了以下数组:

    complex system[MAX_NODES+1][MAX_NODES+2];

函数对这个数组的元素做的第一件事就是初始化它们,但是应用程序会在运行时编译并崩溃,除非另外声明了具有相同维度和类型的数组(即使它没有被使用) :

    complex system1[MAX_NODES+1][MAX_NODES+2],
    complex system[MAX_NODES+1][MAX_NODES+2];

这让我相信这是一个内存问题,也许第一个系统正在分配所需的内存......是这样吗?如果是这样,为什么?

MAX_NODES是一个设置为300的常量,所以我认为数组声明已经分配了内存......我应该使用malloc吗?

无论如何,将系统声明为静态似乎可以解决问题:

    static complex system[MAX_NODES+1][MAX_NODES+2];

我只是不知道为什么......我知道函数内部的静态变量使得该变量在后续函数调用中保持其值,但是这与内存有关或者这个问题是什么?有什么提示吗?

提前多多感谢。

1 个答案:

答案 0 :(得分:2)

您的代码:

for (lines = 0; lines <= MAX_NODES+1; lines++)
{ 
     for (columns = 0; columns <= MAX_NODES+2; columns++){ 

应该是

for (lines = 0; lines < MAX_NODES+1; lines++)
{ 
     for (columns = 0; columns < MAX_NODES+2; columns++){ 

您将两个阵列尺寸超过1,否则会导致内存错误。