现象:
Release版本正常,Debug版本报错:
原因:
越界或是堆栈溢出
定位问题:
通过二分查找法,放置检查点
_ASSERTE(_CrtCheckMemory());
vtkSmartPointer<vtkImageData> grtBlkPicture(int size[3]) {
vtkSmartPointer<vtkImageData> img = vtkSmartPointer<vtkImageData>::New();
vtkSmartPointer<vtkInformation> info = vtkSmartPointer<vtkInformation>::New();
int maxI = size[0];
int maxJ = size[1];
int maxK = size[2];
img->SetDimensions(maxI, maxJ, maxK);
img->SetScalarType(VTK_UNSIGNED_CHAR, info);
img->SetNumberOfScalarComponents(1,info);
img->AllocateScalars(info);
for (int i = 0; i < maxI; i++) {
for (int j = 0; j < maxJ; j++) {
for (int k = 0; k < maxK; k++) {
unsigned char* pixel = (unsigned char*)img->GetScalarPointer(i, j, k);
*pixel = (unsigned char)0;
// 以下代码debug版本越界异常,_ASSERTE(_CrtCheckMemory());
*(pixel + 1) = (unsigned char)0;
*(pixel + 2) = (unsigned char)0;
}
}
}
return img;
}
解决:
//*(pixel + 1) = (unsigned char)0;
//*(pixel + 2) = (unsigned char)0;