2017-06-12 54 views
1

我在這個程序中出現了分段錯誤。我認爲它符合我遞增指針ptrptr++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); 
} 

回答

3

遞增指針不會導致分段錯誤。

您的問題與free(ptr)。在Linux man page for free它說:

free()函數釋放內存空間由ptr必須已返回由以前調用malloc()calloc()realloc()指出。

當你的程序運行,ptr得到增加,成爲由以前的調用返回malloc的值不同,導致分割故障當你調用free(ptr)