C - FPUTC 无法处理大文件?分段故障 11



我使用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));

相关内容

  • 没有找到相关文章

最新更新