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



我在这个程序中遇到了分段错误。我认为它符合我将指针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 手册页中free它说:

free()函数释放ptr指向的内存空间,该内存空间一定是由先前对malloc()calloc()realloc()的调用返回的。

随着程序的运行,ptr会递增,变得与先前调用 malloc 返回的值不同,从而导致调用 free(ptr) 时出现分段错误。

相关内容

  • 没有找到相关文章

最新更新