У меня небольшая проблема с доступом к памяти в моей программе, и я не нахожу ошибку, возможно, кто-то может мне помочь.
Я создал новый тип для хранения значений цвета RGB.
Этот тип выглядит так:
typedef struct pixel {
unsigned char r;
unsigned char g;
unsigned char b;
} pixel;
В моей основной программе я создаю с помощью calloc двумерный динамический массив для хранения информации красного цвета.
pixel **pixelvalue = (pixel **) calloc(imginformation.width, sizeof(pixel));
for (i = 0; i < imginformation.width; i++) {
pixelvalue[i] = (pixel *) calloc(imginformation.height, sizeof(pixel));
}
После этого я вызываю свою функцию, которая считывает значения цвета и кто должен сохранять их в массиве. Функция получает в качестве параметра массив.
ReadFile(file, imginformation (Stuff like height and so one), pixelvalue (The calloc array));
В этой функции я пытаюсь записать значения с помощью
pixelvalue[i][j].r = (unsigned char)fgetc(in);
Здесь я получаю ошибку доступа к памяти, что я не так сделал?
Редактировать
Привет, прежде всего, извините за отсутствующий язык, вчера я немного устала:).
Для понимания я создал массив пикселей, а элементы указывают на другой массив пикселей? Что-то вроде [Point to another 1D array pixel]
?
С пикселем **pixelvalue = calloc(imginformation.width, sizeof(pixel *));
Я создаю imginformation.width
номеров указателей от типа pixel, и каждый указатель отображается в пикселях, верно?
Было бы замечательно, если бы вы могли объяснить это немного подробнее, если я ошибаюсь. Я бы очень хотел это понять.
@ carl-norum Что вы имеете в виду:
"вы не должны приводить возвращаемые значения calloc (). Это может сделать
скрыть ошибки с #include, которые могут вернуться, чтобы укусить вас вниз
дорога ".
? Я использую выделенное пространство как параметр для функции, а не как возвращаемое значение.
Спасибо за вашу помощь!
Greetz