C ++: запись нуля в файл .bmp

Я пытаюсь прочитать файл .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

Что я должен изменить, чтобы правильно писать?

1

Решение

frwite() принимает указатель в качестве первого аргумента. Вы проходите 0, которая оказывается константой нулевого указателя — поэтому ваша программа разыменовывает этот нулевой указатель и выполняет проверку утверждения.

Вам нужно передать указатель в качестве первого аргумента:

char zero = 0;
fwrite(&zero, 1, 1, output);
7

Другие решения

Первый параметр fwrite должен быть const void* указатель, указывающий на буфер, который содержит данные для записи. Вы передаете нулевое значение указателя (0) который разыменовывается внутри fwrite, что приводит к неопределенному поведению.

Вам нужен правильный объект, содержащий ноль:

char c = 0;
fwrite(&c, 1, 1, output);
3

Насколько я знаю, каждая «строка» пикселей заканчивается нулем

Это неверно, строки развертки заполнены 4 байтами.

Там должно быть 0, 1, 2 или 3 байта в конце, так что scanlinesize % 4 == 0

2

fwrite(0, 1, 1, output);

Вы пишете недопустимый (нулевой) указатель. Попробуйте написать это как символ:

char stringEnd = 0; //char 0 = \0
fwrite(&stringEnd, 1, 1, output);
1
Похожие вопросы
Добавить ответ
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Нажимая кнопку «Отправить», я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта.