我使用fputc有问题 - 也许有人可以提供帮助。我在开始时分配了一些存储空间,并在数据[0] ='b'和数据[1] ='m'上分配 - 其余数组中充满了数字。然后,数据将写入.bmp文件:
//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-失败。
非常感谢!问候
这是错误的,因为它需要300,000 * sizeof(long)字节,但您仅分配300,000个字节
unsigned long *data;
data = malloc(300000);
我认为您需要(因为您似乎正在编写字节)
unsigned char *data;
data = malloc(300000);
或(较小的可能)
unsigned long *data;
data = malloc(300000 * sizeof(long));