我将数据保存在缓冲区中,
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)
这是在struct
中的值bufPtr[counter].a[0] = a1[0];
上面的行发生在其他所有内容之前,但是因为它在另一个循环中,它必须是我正在使用或分配的内存量的问题
答案 0 :(得分:2)
三件不应该改变的东西,但会使我们(和你)更容易理解和修复你的代码。
Buf
vs buf
)typedef struct
进行结构定义以下是一个例子:
typedef struct
{
unsigned short a[2];
unsigned short b[2];
} Buffer;
Buffer *buf = malloc(sizeof(Buffer) * MAX_FILE_SIZE);
至于导致段错误的原因,很难说。我希望看到#define
的{{1}},以及有关崩溃发生位置的更多背景信息。你的MAX_FILE_SIZE
现在看起来很好,但是你没有检查它是否成功......
答案 1 :(得分:1)
fopen(3)
的返回值,当它无法打开文件时会返回NULL
。sizeof( struct buf )
告诉您结构的大小,而sizeof( buf )
给出buf
变量的大小,即指针的大小,取决于平台,为4或8个字节。< / LI>
答案 2 :(得分:1)
请改用sizeof(struct buf)。
答案 3 :(得分:0)
要做的第一件事:在调试器下运行它。什么线导致段错误?
此外,sizeof(buf)
总是会在正常的32位计算机上为您提供4,因为您正在使用指针的大小。
答案 4 :(得分:0)
作为一般的经验法则,总是通过适当的错误处理代码(即return(1))错误检查I / O函数和系统调用。尝试在if语句中运行这些类型的函数,并在语句中处理日志记录/调试/退出。
答案 5 :(得分:0)
尝试将fwrite更改为:
fwrite(buf, sizeof(struct buf), MAX_FILE_SIZE, fp);
你分配了struct buf * buf来为MAX_FILE_SIZE分析struct buf数据分配内存。
If声明可能也是一个问题;但是,我需要知道它周围的代码是什么 - 这是在循环中完成的等等。