2014-10-21 51 views
-1

你好,我有這個問題。我做了這個功能:函數deque到數組不工作

void* deque2array(tDeque * D){ 

    void *arr = NULL; 

    int i; 
    tNodo * aux = D->ppio; 

    for(i=0; i < D->cant; i++){ 
     arr = aux->elem; 
     arr++; 
     aux=aux->sig; 
    } 

    return arr; 
} 

然後我做了一個測試,以確保這個功能正常工作。

tDeque * queue = createDeque(); 

int x=5; 
int y=2; 
int z=3; 

insertInDeque(queue, &x); 
insertInDeque(queue, &y); 
insertInDeque(queue, &z); 

int* pointer = deque2array(queue); 
int i; 

for(i=0; i<numberOfElements(queue); i++){ 
    pointer = pointer + i; 
    printf(" %d ", *pointer); 
} 

但我得到的只是內存地址,我不知道我在做什麼錯。

回答

1

你在做錯幾件事。首先,你正在發佈一個不完整的代碼示例。我們不知道D->ppioD->cantaux->sigaux->elem是什麼,我們也不知道您是否在insertInDeque中正確設置了它們。

deque2array

arr = aux->elem 

你可能想:

*arr = aux->elem 

否則,該函數返回存儲在最後aux->elem + 1的價值很難捉摸如何將沒有運行如果它應該返回void*,則爲例外。

在測試儀:

pointer = pointer + i 

你是在循環的每次迭代修改pointer。因此,第N次循環的pointer是原始值pointer總和整數0到N,而不是原來的值pointer加上i,因爲它看起來是它的意圖。同樣,如果這段代碼運行時沒有異常,那將是一個奇蹟,因爲它將會讀取超出數組範圍的內存。給定足夠大的返回值numberOfElements(queue),這可以保證產生錯誤。

一旦你固定這些問題,如果我假設aux->elem是什麼,我認爲這是和insertInDeque做什麼,我想是的話,你的新問題將要插入的xy地址,並z進入結構,而不是數值,因此,對於您更正的測試代碼來說,打印變量的地址是有意義的。到目前爲止,由於您正在讀取未定義的內存位置,因此無論數據結構中的實際內容如何,​​結果都沒有意義。