C数组内存分配

标签 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];

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

非常感谢。

最佳答案

您的代码:

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 - 因此会出现内存错误。

关于C数组内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20137248/

相关文章:

Java "new String[-1]"通过编译。怎么来的?

ios - 为什么这个 viewController 属性不能阻止对象被释放?

python - 将参数传递给 PyRun_File(***)

objective-c - 动态分配数组( vector 实现的动态大小)

c++ - C++ 宏中的 "##"是什么意思?

c - 非阻塞调用何时需要 MPI_wait?

javascript - 将数据数组发送到mqtt节点js

java - 循环并不能处理所有事情

iphone - 带有 webview 崩溃的页面 View Controller

C - 类型名称 : Number?