2016-08-10 2 views
0

Я использовал 640, 480, 0 в качестве входа, но он дал ошибку сегментации. Что может быть причиной этого?Что может вызвать ошибку сегментации в следующем коде?

/* Changes the size of an image, allocating memory as necessary, and 
setting all pixels to fillcolor. Returns 0 on success, or a non-zero error code.*/ 
int Image::resize(unsigned int width, unsigned int height, uint8_t fillcolor){ 
    if(pixels) { 
     for(int i = 0; i < rows; i++) { 
      delete[] pixels[i]; 
     } 
     delete[] pixels; 
    } 

    pixels = new uint8_t*[height]; 

    if(pixels == NULL) { 
     return 1; 
    } 

    for(int i = 0; i < height; i++) { 
     pixels[i] = new uint8_t[width]; 
     if(pixels[i] == NULL) { 
      return 1; 
     } 
    } 

    for (int i = 0; i < width; i++) { 
     for (int j = 0; j < height; j++) { 
      pixels[i][j] = fillcolor; 
     } 
    } 

    cols = width; 
    rows = height; 
    return 0; 
} 

Я использовал 640, 480, 0 в качестве входа, но он дал ошибку сегментации. Что может быть причиной этого?

ответ

0

Похоже, что вам нужно поменять «ширина» и «высота»:

for (int i = 0; i < height; i++) { 
    for (int j = 0; j < width; j++) { 
     pixels[i][j] = fillcolor; 
    } 
} 
+0

Спасибо! Знаете ли вы, что может вызвать ошибку сегментации в этом коде: http://stackoverflow.com/questions/38868397/segmentation-fault-when-loading-a-file Кажется, что это аналогичная проблема, м не уверен – Mil3d

0
pixels = new uint8_t*[height]; 

Первое измерение этого двумерного массива height.

for (int i = 0; i < width; i++) { 
    for (int j = 0; j < height; j++) { 
     pixels[i][j] = fillcolor; 
    } 
} 

Этот код использует width для первого измерения pixels массива. Первое измерение находится в диапазоне от 0 до width-1, но оно фактически содержит от 0 до height-1.

+0

Спасибо! Знаете ли вы, что может вызвать ошибку сегментации в этом коде: http://stackoverflow.com/questions/38868397/segmentation-fault-when-loading-a-file Кажется, что подобная проблема – Mil3d

Смежные вопросы