【发布时间】:2013-11-22 04:51:41
【问题描述】:
我真的是 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];
我只是不知道为什么...我知道函数内的静态变量使该变量在后续函数调用中保持其值,但是这与内存或这个问题有什么关系?有什么建议吗?
非常感谢。
【问题讨论】:
-
您的代码听起来很合理。你能提供更多的上下文吗?您是否有可能试图在其范围之外(例如,在函数之外)访问数组?
-
需要展示真实的、可编译的代码——包括初始化。
-
问题出在你的初始化函数中。我认为我们需要看到它。
-
之后运行的初始化函数如下所示: void initialize_system(complex system[MAX_NODES+1][MAX_NODES+2]){ int lines, columns; for (lines = 0; lines pastebin.com/ZEfLDCJn 问题在 mna 函数内部。谢谢!
标签: c arrays memory-management static malloc