2011-04-15 93 views
0

我的C程序的類型是堆棧這樣的定義:空的功能,但分段故障

typedef struct { 
    char T[MaxEl+1][MAX_CHAR]; 
    address TOP; 
    boolean alive;//ignore this 
} Stack; 

,並創建一個功能:

void expandP(Stack stack[],int i,char input[]) {//variable stack is array of Stack 
    .. 

    Stack temp; 
    CreateEmpty(&temp); 
    .. 
    copyStack(&temp,stack[i]); 
} 

void CreateEmpty(Stack *S) { 
    Top(*S) = Nil; 
    isAlive(*S) = false; 
} 

void copyStack(Stack* out,Stack in) { 

} 

提示錯誤分割故障運行時和編譯時無警告

+1

請張貼實際的代碼,將說明問題。另外,調試器是你的朋友。如果您在其中運行程序,它會向您顯示段錯誤發生的位置。 – 2011-04-15 19:44:42

+0

MaxEl和MAX_CHAR的值是什麼?可能是你在堆棧上分配太多。 – Donotalo 2011-04-15 19:45:21

+0

特別是導致分段錯誤的原因是什麼?你在調試器中檢查過你的變量嗎? – multipleinterfaces 2011-04-15 19:47:31

回答

0

品牌Stack in指針

void copyStack(Stack* out, const Stack *in) { 

然後調用它像這樣:

copyStack(&temp,&stack[i]); 
+0

的某個地方定義好了,這就解決了這個問題,爲什麼會這樣呢? – bysreg 2011-04-15 19:52:47

+0

你的'struct'中的某些內容不能像你使用'int'那樣複製,所以你需要傳遞一個指針給它。說實話,我從來沒有通過除了通過指針之外的任何方式傳遞'struct',但我用'C'來做,而且看起來你正在使用派生類。 – BMitch 2011-04-15 20:33:55