我在使用fputc时遇到问题 - 也许有人可以提供帮助。 我在开头分配了一些存储空间并分配了数据[0] =' B'和数据[1] =' M' - 数组的其余部分用数字填充。然后数据将写入.bmp-File:
//this scenario works
unsigned long *data;
data = malloc(55);
data[0] = 'B';
data[1] = 'M';
data[2] = 34;
data[3] = 0;
.
.
.
data[55] = 0;
unsigned long long i;
FILE *output;
output = fopen("output.bmp", "wb+");
if(output==NULL) {
printf("ERROR writing files!\n");
}
for( i = 0; i < 55; i++)
{
fputc(data[i], output);
}
fclose(output);
其余的(数据[2] - 数据[55])充满了数字。当我将数据写入.bmp文件时,一切正常(在本例中我生成了一个蓝色的1px)。现在,如果我想要一个更大的.bmp文件,例如:
//this scenario doesn't work
unsigned long *data;
data = malloc(300000);
data[0] = 'B';
data[1] = 'M';
data[2] = 34;
data[3] = 0;
.
.
.
data[300000] = 0;
unsigned long long i;
FILE *output;
output = fopen("output.bmp", "wb+");
if(output==NULL) {
printf("ERROR writing files!\n");
}
for( i = 0; i < 300000; i++)
{
fputc(data[i], output);
}
fclose(output);
发生以下错误:
分段错误:11
我发现,malloc的最后一个大小,它的工作原理是malloc(130000) - 所有这些都不起作用。 有谁有任何想法,我怎么能摆脱这个问题?
我也尝试将fputc更改为fwrite - 失败。
非常感谢! 问候
答案 0 :(得分:2)
这是错误的,因为它需要300,000 * sizeof(长)字节,但你只需要分配300,000字节
unsigned long *data;
data = malloc(300000);
我认为你需要(因为你似乎在写字节)
unsigned char *data;
data = malloc(300000);
或(不太可能)
unsigned long *data;
data = malloc(300000 * sizeof(long));