我在这个程序中遇到了分段错误。我认为它符合我将指针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)
时出现分段错误。