2015-10-13 31 views
0

這給我一個分段錯誤錯誤。任何想法爲什麼?ADT的分段錯誤

#include <stdio.h> 
    #include <string.h> 
    #include <stdlib.h> 
    typedef struct { 
    int *items; 
    int length; 
} IntArray; 

void init(IntArray *I) 
{ 
// I->length = 0;  
I->items = (int *) malloc(sizeof(int) * 5); 
I->items[0] = 1; 

    } 
     int main() 
    { 
    IntArray *i; 
     init(i); 
    return 0;} 

我想也許我做的一切都是正確的,除了宣佈在主要的IntArray,不知道我究竟是如何做到這一點

回答

0

這裏:

int main() 
{ 
    IntArray *i; // uninitialised pointer 

    init(i); 
    return 0; 
} 

i是未初始化。它沒有任何意義。當您將此指針傳遞給init並通過i->items將其解除引用時,您會收到分段違規。

而不是創建一個指針,你可以創建一個結構對象,並通過其地址:

int main() 
{ 
    IntArray i;  // uninitialised object 

    init(&i);  // valid address to said object 
    return 0; 
} 

對象本身也未初始化,即其字段包含垃圾,但你會解決,在init

+0

謝謝,修復它。我有一種感覺,這是錯誤的,但是對C來說是新的,我感到困惑。 – user3388579

0

參數i被傳遞到init(IntArray *I)沒有在功能之前main()來定義呼叫,導致分配I->items時出現未定義的行爲。

未定義的行爲意味着您的seg故障,在這種情況下。