C:如何知道动态内存太多(三指针)

时间:2015-02-03 11:41:17

标签: c dynamic-memory-allocation

我面临着一个非常烦人的问题,那就是;我正在分配这样的三指针:

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)总是一个,但这就是我为这个作业编写它的方式。很抱歉。)

0 个答案:

没有答案