【发布时间】:2015-02-15 13:42:13
【问题描述】:
我有一个类的构造函数,每当调用它都会导致整个系统崩溃(它变得无响应)。我发现这是在动态数组的内存分配期间引起的。 这是我的代码片段:
//constructor
ImageData::ImageData(string givenPath){
imagePath=givenPath; //path
imageObject = imread(imagePath, CV_LOAD_IMAGE_GRAYSCALE); //load Image
chosenX = 0; //default value
chosenY = 0; //default value
cols=imageObject.cols; //columns in image
rows=imageObject.rows; //rows in image
size = cols*rows; //amount of pixels in image
startPoint = 0; //default - top left corner
//setup memory for dynamic arrays
mapWithDistances = new int * [size];
for( int i = 0 ; i < size ; i++ ){
mapWithDistances[i] = new int[size];
}
distances = new int [size];
}
//deconstructor
//deletes dynamic arrays
ImageData::~ImageData(){
for (int i = 0; i < size; i++) {
delete [] mapWithDistances[i];
}
delete [] mapWithDistances;
delete [] distances;
}
这可能是微不足道的,但我无法找到解决方案。我哪里做错了?
【问题讨论】:
-
for( int i = 0 ; i < size ; i++ ) mapWithDistances[i] = new int[size];如果new失败,你会怎么做?此代码将有内存泄漏。即使您知道该做什么,您也必须编写代码来执行catch,然后释放所有先前成功的分配。使用容器类,或仅使用 2 个分配编写代码(搜索 SO 以了解如何执行此操作)。 -
您的代码会严重分割堆内存。如果您要编写这样的代码,请参阅分配二维数组的替代方法:stackoverflow.com/questions/27425126/…