fputc 无法处理大文件?段错误 11
fputc can't handle large files? Segmentation Fault 11
我在使用 fputc 时遇到问题 - 也许有人可以提供帮助。
我在开始时分配了一些存储空间并分配给了 data[0] = 'B' 和 data[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);
剩下的(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));
我在使用 fputc 时遇到问题 - 也许有人可以提供帮助。 我在开始时分配了一些存储空间并分配给了 data[0] = 'B' 和 data[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);
剩下的(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));