2017-06-12 11 views
1

このプログラムでセグメンテーションフォルトが発生しています。私はどこにポインタ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); 
} 

答えて

3

ポインタを増分してもセグメンテーションフォールトは発生しません。

問題はfree(ptr)です。 Linux man page for freeでは、それは言う:

free()機能は、メモリ空間がmalloc()calloc()またはrealloc()に前回の呼び出しによって返されていなければなりませんptrによって指さ解放します。あなたのプログラムの実行として

ptrがインクリメントされます、あなたはfree(ptr)を呼び出すときにセグメンテーションフォールトが生じ、mallocに前回の呼び出しによって返された値と異なってしまいます。

関連する問題