我在这个程序中遇到段错误。我认为它符合我将指针 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 byptr
, which must have been returned by a previous call tomalloc()
,calloc()
orrealloc()
.
当您的程序运行时,ptr
会递增,变得与之前调用 malloc
返回的值不同,导致在您调用 free( ptr)
.
关于c - 递增指向结构的指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44506456/