2014-06-19 20 views
2

我絕對新的C遊戲,並會喜歡用下面的代碼片段一些幫助:代替陣列的用指針

#include <stdio.h> 

int main() { 
    int cases; 
    scanf("%d", &cases); 
    printf("%d", cases); 

    int i; 
    int *heights; 
    for(i=0; i<cases; i++){ 
     scanf("%d", &heights[i]); 
    } 

    return 0; 
} 

我明白,它出現segfaults因爲我給scanf一個NULL指針,那麼有什麼辦法可以讓scanf給這個指針提供值?或者是否有更好的方法從stdin中獲取可變數量的參數,而我完全沒有?

+0

在一個側面說明你(可能)沒有給出任何空指針。讓變量未分配意味着它們具有未定義的值,因此可以是任何東西。 – DrYap

+0

主要的問題是高度被定義爲一個指針,你沒有(可能通過malloc())給它指向任何東西。 – user3629249

回答

7

使用mallocheights動態分配空間。

int *heights = malloc(cases*sizeof(int)); 

而且free指針調用free(heights)當你與heights完成。

對於cases小的值,你可以使用variable length arrays

int heights[cases]; 

,不要忘記編譯代碼在C99模式(-std=c99)。

+0

非常感謝!我會盡快表示接受。 –

+2

+1對於'malloc()'的任何東西,養成​​調用'free()'的習慣。 – WhozCraig

+0

@WhozCraig;是。補充說:) – haccks

3

高度指針不包含任何memory.so首先你必須根據需要使用malloc系統調用分配內存。你的情況 語法的malloc -

heights = (int *)malloc(cases*sizeof(int));

有一點要記住,動態memeory位置後你必須釋放it.syntax可用內存 -

free(heights)