Строка Malloc и отредактируйте ее - PullRequest
0 голосов
/ 19 апреля 2011

я создаю здесь некоторое пространство для malloc и с этим динамическим массивом 2.

имеет цветовой буфер [от 0 до 256] [от 0 до 4]. и я прочитал файл BMP и поместил цвета в.

Теперь я хочу изменить настройки цвета, но это не работает

как цветовой буфер [0] [0] = "255"

теперь первый цвет красного значения должен быть 255

но затем моя программа закрывается. также как colorbuffer [233] [2] = "23" цвет 233 значение зеленого должно быть теперь 23.

и я тоже не могу распечатать его как printf («Цветочувствительный% d», цветовой буфер [0] [1]);

НЕКОТОРЫЕ ОТРЫВКИ ИЗ ИСТОЧНИКА -> http://pastebin.com/fRD5w1XC

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

edit // Закончился сбой при чтении и записи в & colorbuffer! спасибо stackoverflow!

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Вы должны повторить до 256 вместо 4 здесь:

  for (i=0;i<256;i++) //original code *for (i=0;i<4;i++)*
  {
  colorbuffer[i]=malloc(4*sizeof(unsigned char)); // colorbuffer[256][4]
  }

Компилятор должен дать вам предупреждение, если вы хотите скомпилировать что-то вроде:

colorbuffer[0][0] = "255"

, потому что colorbuffer[0] [0] равно char , а не указатель на char .

  for(i=0; i < ( (int)Datenheader.colors - 1 ); i++)
  {
  fread(&colorbuffer[i], sizeof(unsigned char),4,fp);
  wo = ftell(fp);
  }

Я думаю, вам не нужно здесь вычитать -1 из общего числаколичество цветов (например, если у вас будет 256 цветов, вы будете читать из файла только 255 цветов. Это означает, что 256-й цвет, который находится в массиве colorbuffer [255], вообще не будет инициализирован)

И, конечно, еще одна ошибка missingno сообщил вам об использовании & в fread.

1 голос
/ 20 апреля 2011

Изменение

fread(&colorbuffer[i] //With &

в

fread(colorbuffer[i] //No &

Текущая программа перезаписывает вашу таблицу цветных буферов и вызывает из-за этого всевозможные проблемы.

0 голосов
/ 20 апреля 2011

Мои дни C давно прошли, но ...

void* buffer = malloc( sizeof(uchar) * numOfColors * 4 );

uchar** colors = (uchar**)buffer;

colors[0][1] = 1;

free( buffer );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...