栈空间不足导致out of memory

idInfo.baseMat = readMat(baseFile, rmc, rmr);
idInfo.meanMat = readMat(meanFile, mmc, mmr);
idInfo.referMat = readMat(trainFile, tmc, tmr);

CvMat *readMat(char *filePath, int width, int height) {  assert(NULL != filePath);  assert(width*height > 0);

 CvMat *Mat = cvCreateMat(height, width, CV_32FC1);  FILE *fp = fopen(filePath, "rb");  for(int i=0; i<height; i++)  {   unsigned char *p = Mat->data.ptr + i*width;   int r = fread(p, sizeof(double)*width, 1, fp);   if(r != 1) perror("");  }  fclose(fp);

 return Mat; }

在连续三次读取比较大的矩阵的时候,执行第三个readMat函数出现了错误,经过调试发现是cvCreateMat()函数out of memory并且是堆栈错误,当注释掉前两个readMat函数后,错误不再出现,据初步分析,可能是栈空间不足引起的。或者改为如下代码,使其在堆上分配空间也可以。

static CvMat *baseMat = cvCreateMat(rmr, rmc, CV_32FC1);
static CvMat *meanMat = cvCreateMat(mmr, mmc, CV_32FC1);
static CvMat *trainMat = cvCreateMat(tmr, tmc, CV_32FC1);


由此可以看出cvCreateMat应该是在栈上分配空间?

你可能感兴趣的:(栈空间不足导致out of memory)