【发布时间】:2018-08-16 14:51:59
【问题描述】:
我正在尝试从原始文件中读取数据并将它们存储在 char * 类型的缓冲区中,然后将其存储在 jpg 文件中,由于某种原因,我不断收到“分段错误”错误。
我正在使用 malloc() 函数为缓冲区分配 512 个字节的内存,但在出现错误之前我一次最多只能读取 8 个字节(我正在尝试一次读取 512 个字节) .
这是我的代码:
char *rawfilename = argv[1];
FILE *rawfile = fopen(rawfilename, "r");
if(rawfile == NULL)
{
fprintf(stderr, "Could not open %s.\n", rawfilename);
return 2;
}
char imgfilename[] = "image0.jpg";
FILE *imgfile = fopen(imgfilename, "w");
char *buffer = malloc(512 * sizeof(char));
//This works
fread(&buffer, 8, 1, rawfile);
fwrite(&buffer, 8, 1, imgfile);
/////////
//This doesn't work
fread(&buffer, 512, 1, rawfile);
fwrite(&buffer, 512, 1, imgfile);
/////////
free(buffer);
fclose(rawfile);
fclose(imgfile);
我已尝试在 Google 上搜索此问题并通过 Stack Overflow 进行搜索,但找不到与此特定问题相关的任何内容,因此如果此类问题已得到解答,我深表歉意。我可能在做一些愚蠢的事情或没有正确使用某些东西。
谢谢
【问题讨论】:
-
在 fread/fwrite 中删除
&之前的buffer -
我之前尝试过,虽然我可以存储更多字节,但它最多只能存储 521 个字节。如果我再存储,我会收到此错误:“free(): invalid next size (normal): 0x0000000002197490 ***”。我认为在存储超过 512 个字节后会出现错误,但直到达到 522 才会出现错误。会碰巧知道为什么吗?我只是想更好地了解这是如何工作的。谢谢!
-
如果你要求 512 的内存,那么这就是你得到的。所以你不能在那里存储超过 512 个字节。你所做的就像在没有足够的钱的情况下买东西。
-
当系统确定有问题时,您会收到错误(如果有)。这可以是立即的、稍后的,甚至永远不会(并且从不包括“没有消息但错误的结果”)
标签: c segmentation-fault malloc