fputc无法处理大文件?分段错误11

时间:2017-12-01 16:54:42

标签: c file segmentation-fault malloc fwrite

我在使用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 - 失败。

非常感谢! 问候

1 个答案:

答案 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));