2014-03-30 74 views
0

這是我的問題。我沒有在我的代碼中得到正確的char *返回值。下面是我的代碼部分我沒有得到最終回報的正確回報值

主要功能:

int main(int argc, char *argv[]){ 
.... 
.... 
    while (counter < line_C){ 
     char* zzz = searcher(line_arr[counter], 0); 
     prog_counter[prog_counter_C] = atoi(zzz); 
     prog_counter_C++; 
     counter++; 
    } 
} 

ZZZ得到正確的指針,但價值似乎被覆蓋。 這裏有更多的代碼片段來顯示搜索器功能的運行時間。爲附加功能

char* searcher(char input[], int method){ 
    ... 
    ... 
    else if (strncmp(instruction,"ADD", 3) == 0) 
     return ADD(passer, method, 0); 
    ... 
    ... 
} 

代碼片段:

char* ADD(char input[], int method, int bytecount){ 
    switch(method){ 
    case 0: 
     char wtf[2]; 
     char *returner = itoa(Parse_Prog_Count(input), wtf, 10); 
     return returner; 
     break; 
} 

代碼片段Parse_Prog_Count功能:

int Parse_Prog_Count(char input[]){ 
    ... 
    ... 
    return bytecount; 
} 

我曾嘗試調試,我從Parse_Prog_Count得到正確的返回值,然後ADD,但是當它從搜索者返回到main的最後一個返回時,該值是錯誤的。

我也嘗試從ADD追加到搜索者的值來檢查值,並且返回值仍然正確。這是我遇到問題的最後一個傳球。 來自zzz的值似乎有所改變。

+1

你確定var不會超出範圍? (返回堆棧分配的var的地址是一個可能的錯誤) – avmohan

回答

1

您聲明跆拳道作爲堆棧上的局部變量,作用域ADD功能:

char* ADD(char input[], int method, int bytecount){ 
    switch(method){ 
    case 0: 
     char wtf[2]; 
     char *returner = itoa(Parse_Prog_Count(input), wtf, 10); 
     return returner; 
     break; 
} 

然後,您正在返回一個指向「*武者回歸」是堆棧存儲器,函數退出時,並超出範圍,您的數據也是如此。所以,你的指針現在指向誰知道什麼。

+0

ahhh,謝謝你指出。愚蠢的錯誤在我的角色。返回值在以前工作,但當我在char * ADD下添加了一個新函數時,它已經失靈。 – MDuh