【发布时间】:2012-08-14 19:06:57
【问题描述】:
我不知道错误是什么,因为这是在 Windows 上,我不知道如何在 Windows 上逐步执行程序。关于程序为什么在这里崩溃的任何想法(请参阅注释行)?我认为这可能与内存滥用有关。
#define TABLE_MAX_ROW 500
#define TABLE_MAX_COL 20
#define TABLE_MAX_ELT_LEN 60
从这里开始:
foo()
{
char table[TABLE_MAX_ROW][TABLE_MAX_COL][TABLE_MAX_ELT_LEN];
bar(table);
}
传递给这个函数:
bar(char table[TABLE_MAX_ROW][TABLE_MAX_COL][TABLE_MAX_ELT_LEN])
{
unsigned int col, row;
if (table == NULL) { // crashes here
printf("error: table == NULL!\n");
return -1;
}
for (row = 0; row < TABLE_MAX_ROW; row++)
for (col = 0; col < TABLE_MAX_COL; col++)
table[row][col][0] = '\0'; // if above if block commented out, crashes here
return 0;
}
【问题讨论】:
-
这是一个相当大的数组,要在堆栈上分配。如果将“最大值”更改为 1 1 和 1 会发生什么?
-
我无法在 Windows Visual C++ Express 中重现任何崩溃。
-
在我的机器上运行良好,使用 MinGW 编译,包括 windows.h 和 iostream。
-
@ddyer 将值初始化为
111使其不会崩溃。所以大分配是导致它崩溃的原因。有什么办法吗? (Windows 8)@Razvan 是的 -
IIRC Windows 中的标准堆栈大小约为 1 MB,而 Linux 为 8MB,因此可以说 ddyer 有所作为。