增加指向结构的指针时出现分段错误

时间:2017-06-12 18:35:44

标签: 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);
}

1 个答案:

答案 0 :(得分:3)

增加指针不会产生分段错误。

您的问题出在free(ptr)。在Linux man page for free中它说:

  

free()函数释放ptr指向的内存空间,该内存空间必须是之前调用malloc()calloc()或{{ 1}}

当您的程序运行时,realloc()会增加,与之前调用ptr时返回的值不同,从而导致调用malloc时出现分段错误。