我面临着一个非常烦人的问题,那就是;我正在分配这样的三指针:
char*** allocTripleCharPtr(int firstDim, int secondDim, int thirdDim)
{
int i = 0;
int j = 0;
char*** triplePointer = malloc((firstDim*sizeof(char**)));
if(triplePointer == NULL) return NULL;
for(i = 0; i < firstDim; i++)
{
triplePointer[i] = malloc((secondDim+1)*sizeof(char*));
if(triplePointer[i] == NULL) return NULL;
}
for(i = 0; i < firstDim; i++)
{
for(j = 0; j <= secondDim; j++)
{
triplePointer[i][j] = malloc(thirdDim*sizeof(char));
if(triplePointer[i][j] == NULL) return NULL;
}
}
return triplePointer;
}
并且尺寸不受限制(现在,第三个暗淡总是3)。
如果用30000 * 30000 * 3这样的尺寸调用程序,整个计算机就会崩溃,而不仅仅是终端(使用Ubuntu 64bit,GCC)。
我试图通过插入if(first dim > (INTMAX/seconddim)) return ERROR;
来限制数组,希望它与溢出有关,但那里没有运气。
所以我的问题是 - 首先,为什么会崩溃?它适用于40k * 2k,但不是40k * 20k。
第二,可以分配多少内存,是否存在if(triplePtr == NULL) return ERROR;
未检测到的分配错误?
谢谢!
(编辑:我知道sizeof(char)总是一个,但这就是我为这个作业编写它的方式。很抱歉。)