2011-04-19 46 views
0

我在这里创建了一些malloc的空间,并使用了2个动态数组。Malloc字符串并编辑它

它有colorbuffer [0到256] [0到4]。 和我读了一个bmp文件,并把颜色。

现在我想改变颜色的设置,但此心不是工作

像colorbuffer [0] [0] = “255”

现在第一种颜色的红色值应为255

但我的程序关闭了。 也像colorbuffer [233] [2] = “23” 颜色233绿色的值应该是现在23.

,我也倾斜打印出来等 的printf( “颜色senitive%d”, colorbuffer [0] [1]);

某些段落出源的 - >http://pastebin.com/fRD5w1XC

希望你能帮助我将是真棒,谢谢

编辑//完成的失败是在读的&和写入& colorbuffer ! 谢谢你stackoverflow!

回答

1

变化

fread(&colorbuffer[i] //With & 

fread(colorbuffer[i] //No & 

目前这个节目被覆盖你colorbuffer表,并造成各种麻烦事后的缘故吧。

+0

如果我删除&程序刚启动后关机! – Mysterigs 2011-04-19 20:18:37

+0

原来你有多个bug!检查Ansi的答案,说明为什么在更改'&' – hugomg 2011-04-19 20:22:30

0

我的C日子已经一去不复返了,但......

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

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

colors[0][1] = 1; 

free(buffer); 
1

你应该重复,以多达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]是不是指向字符的指针

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约&使用另一个bug的源流。

+0

“colorbuffer [0] [0]后字符不是指向char的指针。那么我怎么把那个30色的红色值换成200呢?所以我的意思是colorbuffer [30] [0] = 200? ... – Mysterigs 2011-04-19 20:19:30

+0

@Mysterigs是的,这是正确的使用colorbuffer [30] [0] = 200. – 2011-04-19 20:24:30

+0

真棒我发现了错误...这是&什么@missingno的意思!我在读和写中使用它。现在我删除它,它的作品! – Mysterigs 2011-04-19 20:29:29