我将数据保存在缓冲区中,
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];
上面的行,发生在其他一切之前,但因为它在另一个循环中,所以它一定是我正在使用或分配的内存量有问题
最佳答案
三件事不应该改变,但会让我们(和你)更容易理解和修复你的代码。
- 永远不要为变量和类型使用相同的名称(buf 与 buf),最好避免使用仅类型不同的标识符。一个常见的习惯用法是大写类型。 (
Buf
对比buf
) - 很好地格式化和缩进代码
- 使用
typedef struct
进行结构定义
这是一个例子:
typedef struct
{
unsigned short a[2];
unsigned short b[2];
} Buffer;
Buffer *buf = malloc(sizeof(Buffer) * MAX_FILE_SIZE);
至于导致段错误的原因,很难说。我想查看 MAX_FILE_SIZE
的 #define
,以及有关崩溃发生位置的更多上下文。您的 malloc
现在看起来不错,但您没有检查它是否成功...
关于c - c 代码中的段错误需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4218596/