【发布时间】:2010-11-18 19:14:06
【问题描述】:
我将数据保存在缓冲区中,
struct buf *bufPtr = malloc((sizeof(struct buf))*(MAX_FILE_SIZE));
然后我想将缓冲区写入大小为(sizeof(struct buf))*(MAX_FILE_SIZE) 的文件
下面的代码将允许我打开一个新文件,用缓冲区的内容填充它,关闭文件并释放缓冲区
#define MAX_SIZE_PER_FILE 0x4000000
FILE *fp;
struct buf *bufPtr = malloc((sizeof(struct buf))*(MAX_FILE_SIZE));
k1[0]=0x0000;
k1[1]=0x0000;
while(k1[0] != 0xffff)
{
while(k1[1] != 0xffff)
{
//something different happens in the below line, but has noting to do with segmentation errors
bufPtr[i].a[1] = k[1]
//occurs on all variables of the struct
if( write_count + sizeof(struct buf) >= sizeof(struct buf)*MAX_FILE_SIZE ) {
write_count = 0;
sprintf( filename, "keys%d", file_idx );
file_idx++;
fp = fopen(filename, "wb");
printf("test1");
fwrite(bufPtr, sizeof(struct buf)*(MAX_FILE_SIZE),1,fp);
fclose(fp);
free(bufPtr);
}
write_count += sizeof(struct buf);
k1[1]++;
counter++;
}
write_count += sizeof(struct buf);
k1[1]++;
i++;
}
我在这段代码的某个点遇到了分段错误,我知道 max_file_size 会更大,因为 struct buf 由两个短裤组成
struct buf{
unsigned short a[2];
unsigned short b[2];
};
大家有什么想法
我通过我的 mac 运行它时遇到了这个错误
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
(gdb)
这是在结构中的一个值
bufPtr[counter].a[0] = a1[0];
上面的行,出现在其他所有内容之前,但由于它在另一个循环中,它一定是我正在使用或分配的内存量有问题
【问题讨论】:
-
你是如何定义文件名的?
-
它实际上写入了一个文件,但是当我在它前面放一个 printf 时,printf 没有被调用,这是我见过的最奇怪的事情
-
@molleman - 有时即使调用 printf() 输出也不会显示,因为输出已缓冲。仅仅因为没有显示文本并不意味着段错误发生在该行之前。
-
是的,我得到了那个 ghillis,干杯
-
永远不要调用与
struct相同的变量。这只是自找麻烦。当你在做sizeof(struct buf)和sizeof(buf)时,你会发现你陷入了自己的陷阱。整理你的代码对你最有帮助。
标签: c malloc segmentation-fault