c - 递增指向结构的指针时出现段错误

标签 c segmentation-fault

我在这个程序中遇到段错误。我认为它符合我将指针 ptr 递增为 ptr++ 的位置。 ptr 是结构类型指针。我还使用了 malloc 函数来分配内存。请提出一些解决方案。

#include <stdio.h>

#include <stdlib.h>

#define DATA 3000

int main() {

  struct two {
    char SName[15];
    float m15, Mb, v, v_Si, R_Si, t;
  };

  struct two * ptr;

  ptr = (struct two * ) malloc(DATA * (sizeof(struct two)));

  float min_m15, min_Mb, min_v, min_v_Si, min_R_Si, min_t;
  float max_m15 = 1.93;
  min_m15 = 0.93;
  min_Mb = -19.69;
  min_v = 10.0;
  min_v_Si = 8.5;
  min_R_Si = 0.1;
  min_t = -5.0;

  for (min_m15 = .93; min_m15 <= 1.93; min_m15 = min_m15 + .1) {

    ptr -> m15 = min_m15;
    ptr -> Mb = min_Mb;
    ptr -> v = min_v;
    ptr -> v_Si = min_v_Si;
    ptr -> R_Si = min_R_Si;
    ptr -> t = min_t;
    ptr++;

  }

  free(ptr);
  return (0);
}

最佳答案

递增指针不会产生段错误。

你的问题是 free(ptr)。在Linux man page for free它说:

The free() function frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc() or realloc().

当您的程序运行时,ptr 会递增,变得与之前调用 malloc 返回的值不同,导致在您调用 free( ptr).

关于c - 递增指向结构的指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44506456/

相关文章:

c - 如何在 C 中返回未知大小的数组

c - 初始化结构而不定义结构成员 - C

c++ - 在内联汇编中调用用户定义的 C 函数

c++ - arduino 和 Visual Studio C++,2 路串行通信

C—修改数据时出现段错误

assembly - 为什么在移动堆栈指针时会出现段错误?

c - CUDD 执行中的段错误

c - 为什么这么多标准 C 函数篡改参数而不是返回值?

c++ - 如何重构包含 vector 的非指针类成员?

c - strtok段错误,仅在输入文件的第一行为空时给出段错误