Обработка на слики - Непозната грешка во сегментирањето

Член од
16 јуни 2022
Мислења
11
Поени од реакции
0
Во C++, работам на проект за обработка на слики. Сепак, наидов на збунувачки проблем - дефект на сегментирање (SIGSEGV). При обработка на помали фотографии, апликацијата работи нормално, но при обработка на поголеми, паѓа со оваа шифра за грешка.

Претпоставувам дека е проблем со меморијата, но не можам да ја најдам грешката. Доделувам RAM меморија за податоците за сликата и соодветно ги расчистувам:
Код:
const int imageWidth = 1920;
const int imageHeight = 1080;
const int imageSize = imageWidth * imageHeight * 3;

unsigned char* imageData = new unsigned char[imageSize];

// ... image processing ...

delete[] imageData;
Се обидов рачно да го прегледам кодот и да дебагирам со помош на gdb и Valgrind, но сепак сум заглавен. Кога користев Гаусов метод за замаглување, Валгринд покажа дека можам да пристапам до меморијата надвор од доделениот бафер:
Код:
void applyGaussianBlur(unsigned char* image, int width, int height) {
    // ... Gaussian blur algorithm ...
    // accessing data beyond allocated buffer size
}
За да го поправам ова, го прочитав овој пост од scaler за дополнителни информации, но не сум сигурен како да го решам овој проблем бидејќи се чини дека алгоритмот работи добро. Погледнав низ форумите, но не најдов директни одговори. Секој совет или предлог ќе биде многу ценет. Подготвен сум да учам и да растам, но овој дефект на сегментирање ме запна.

Ти благодарам за твојата помош!
 

iksimkd

ШшшШшшШ...
Член од
31 јули 2007
Мислења
5.000
Поени од реакции
2.183
Пробуваш да пристапиш до меморија на која немаш пристап. Проблемот го има подетално образложено на StackOverflow форумот, повеќе можеш да прочиташ таму.
 

Ocajna

Domakjinka
Член од
29 јануари 2007
Мислења
1.368
Поени од реакции
2.288
Зашто ми вика вашиот податок е преголем кога пробам да прикачам слика на форум, како тоа да го подесам.
Пс: не знам соодветна тема за прашањево
 
Член од
28 август 2013
Мислења
4.041
Поени од реакции
12.244
Зашто ми вика вашиот податок е преголем кога пробам да прикачам слика на форум, како тоа да го подесам.
Пс: не знам соодветна тема за прашањево
Соучесник беше со тие поради кои ја затворија соодветната тема :)
Во C++, работам на проект за обработка на слики. Сепак, наидов на збунувачки проблем - дефект на сегментирање (SIGSEGV). При обработка на помали фотографии, апликацијата работи нормално, но при обработка на поголеми, паѓа со оваа шифра за грешка.

Претпоставувам дека е проблем со меморијата, но не можам да ја најдам грешката. Доделувам RAM меморија за податоците за сликата и соодветно ги расчистувам:
Код:
const int imageWidth = 1920;
const int imageHeight = 1080;
const int imageSize = imageWidth * imageHeight * 3;

unsigned char* imageData = new unsigned char[imageSize];

// ... image processing ...

delete[] imageData;
Се обидов рачно да го прегледам кодот и да дебагирам со помош на gdb и Valgrind, но сепак сум заглавен. Кога користев Гаусов метод за замаглување, Валгринд покажа дека можам да пристапам до меморијата надвор од доделениот бафер:
Код:
void applyGaussianBlur(unsigned char* image, int width, int height) {
    // ... Gaussian blur algorithm ...
    // accessing data beyond allocated buffer size
}
За да го поправам ова, го прочитав овој пост од scaler за дополнителни информации, но не сум сигурен како да го решам овој проблем бидејќи се чини дека алгоритмот работи добро. Погледнав низ форумите, но не најдов директни одговори. Секој совет или предлог ќе биде многу ценет. Подготвен сум да учам и да растам, но овој дефект на сегментирање ме запна.

Ти благодарам за твојата помош!
Некој поинтер излегува надвор од меморијата што си ја алоцирал.
Стај код да видиме или дебагирај да видиш кај паѓа или клај try/catch на некои сомнителни места да видиш.
 

Kajgana Shop

На врв Bottom