c - c 代码中的段错误需要帮助

标签 c malloc segmentation-fault

我将数据保存在缓冲区中,

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/

相关文章:

c - 无法理解如何在 C 中调整动态数组的大小

c - 在C中为字符串动态分配内存时,是否计算字符串char的\0结尾?

c - 如何在c中扫描行,每行不同?

c++ - 修复 C++ 中的段错误

c++ - 试图用 mmap 引起段错误

c - 程序是 32 位还是 64 位是什么意思?

c - 解决访问冲突

c - 当有一些数据要读取时,select() 会阻塞

c - C 中的动态分配错误

c++ - 结构运算符函数重载中的偶发段错误