繁体   English   中英

动态阵列导致系统崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM