[英]Dynamic array cause system crash
我有一个类的构造函数,该类的构造函数每次调用都会导致整个系统崩溃(它变得无响应)。 我发现这是在动态数组的内存分配期间引起的。 这是我的代码片段:
//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;
}
这可能是微不足道的,但是我找不到解决方案。 我在哪里弄错了?
欢迎来到O(n ^ 2)。 或O(n ^ 4)取决于n是像素数还是图像对角线。
您为每个像素分配一个大小(像素数)* sizeof(int)
的数组。
1000 x 1000像素的图像具有100万像素。 如果int
是4个字节,则上面的代码分配4万亿字节。
这有点浪费资源。
解决方案是不分配4万亿字节。
通常,当使用中等大的n值时,您必须使O存储器的使用真正接近线性,或者跳过循环。 这比保持O-time更重要,因为您可以通过稍等一会儿来获得更多时间:时间性能差意味着您等待,内存性能差意味着您失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.