Я пытаюсь прочитать файл .bmp, изменить его растровые значения и записать в другой файл .bmp.
Насколько я знаю, каждая «строка» пикселей заканчивается нулем, но проблема в том, что, когда я пытаюсь записать это нулевое значение, происходит сбой программы.
for (j = 0; j < height * mCoeff; j++)
{
for (k = 0; k < width * mCoeff; k++)
{
fwrite(&newBitmap[j][k].red, 1, 1, output);
fwrite(&newBitmap[j][k].green, 1, 1, output);
fwrite(&newBitmap[j][k].blue, 1, 1, output);
}
fwrite(0, 1, 1, output); //crashes here
}
Окно ошибок: http://puu.sh/7Cxn1.png
Что я должен изменить, чтобы правильно писать?
frwite()
принимает указатель в качестве первого аргумента. Вы проходите 0
, которая оказывается константой нулевого указателя — поэтому ваша программа разыменовывает этот нулевой указатель и выполняет проверку утверждения.
Вам нужно передать указатель в качестве первого аргумента:
char zero = 0;
fwrite(&zero, 1, 1, output);
Первый параметр fwrite
должен быть const void*
указатель, указывающий на буфер, который содержит данные для записи. Вы передаете нулевое значение указателя (0
) который разыменовывается внутри fwrite
, что приводит к неопределенному поведению.
Вам нужен правильный объект, содержащий ноль:
char c = 0;
fwrite(&c, 1, 1, output);
Насколько я знаю, каждая «строка» пикселей заканчивается нулем
Это неверно, строки развертки заполнены 4 байтами.
Там должно быть 0, 1, 2 или 3 байта в конце, так что scanlinesize % 4 == 0
fwrite(0, 1, 1, output);
Вы пишете недопустимый (нулевой) указатель. Попробуйте написать это как символ:
char stringEnd = 0; //char 0 = \0
fwrite(&stringEnd, 1, 1, output);