gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:36 25 4
gpt4 key购买 nike

我在使用 fputc 时遇到问题 - 也许有人可以提供帮助。我在开始时分配了一些存储空间,并分配给了 data[0] = 'B' 和 data[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);

剩下的(data[2] - data[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);

出现以下错误:

Segmentation fault: 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));

关于c - fputc 无法处理大文件?段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47597944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com