首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fputc不能处理大型文件?分段故障11

fputc不能处理大型文件?分段故障11
EN

Stack Overflow用户
提问于 2017-12-01 16:54:42
回答 1查看 176关注 0票数 0

我使用fputc有问题-也许有人能帮上忙。我在开始时分配了一些存储空间,并分配给data = 'B‘和data1 = 'M’--数组的其余部分都填充了数字。然后,数据将写入..bmp File中:

代码语言:javascript
复制
//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);

其余的(data2 - data55)是用数字填充的。当我将数据写入.bmp文件时,一切正常(在本例中,我生成了一个蓝色的1px)。现在,如果我想要一个更大的.bmp文件,例如:

代码语言:javascript
复制
//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失败。

非常感谢!问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-01 17:01:06

这是错误的,因为它需要300,000 *大(长)字节,但您只分配了300,000字节。

代码语言:javascript
复制
unsigned long *data;
data = malloc(300000);

我认为你需要(因为你好像在写字节)

代码语言:javascript
复制
unsigned char *data;
data = malloc(300000);

或(不太可能)

代码语言:javascript
复制
unsigned long *data;
data = malloc(300000 * sizeof(long));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47597944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档