【发布时间】:2013-03-16 10:59:17
【问题描述】:
以下静态分配导致分段错误
double U[100][2048][2048];
但是下面的动态分配没问题
double ***U = (double ***)malloc(100 * sizeof(double **));
for(i=0;i<100;i++)
{
U[i] = (double **)malloc(2048 * sizeof(double *));
for(j=0;j<2048;j++)
{
U[i][j] = (double *)malloc(2048*sizeof(double));
}
}
在linux中ulimit设置为unlimited。
谁能给我一些关于发生了什么的提示?
【问题讨论】:
-
您确定堆栈大小是无限的吗?还有,你的内存够吗?
malloced 内存可能并非全部由物理内存支持。 -
你确定
malloc没有返回空指针吗? -
是的...我在声明后的代码中使用数组。每个位置都可以访问
-
动态分配的多维数组不需要在内存中连续,静态分配的多维数组可以。
-
malloc 可以为 100*2048*2048 双倍分配空间还是只返回 NULL?该问题可能与内存(地址空间)碎片更相关,而与静态与动态的相关性较小。
标签: c linux memory-management