2013-04-03 15 views
0

我已經提交了一個任務,並且難以完成它。基本上我要創建一個函數,它複製一個雙精度數組,分配足夠的內存,然後返回一個指向新數組基的指針。我已經試過各種事情,但不相信我有正確的事情可是...複製一個雙精度數組,然後將一個指針返回到基地

這是我到目前爲止有:

int *arrayCopyAndBase(double *array, int size) 
{ 
    int i; 
    int *arrayCopy; 
    array_copy = malloc(size * sizeof(int)); 
    for (i = 0; i < size; i++) 
    { 
     arrayCopy[i] = array[i]; 
    } 
    return &arrayCopy; 
} 

錯誤,我敢肯定是明顯的,但作爲一個初學者我正在努力發現它們。我知道& arrayCopy應該可能是& arrayCopy [0],但這會導致地址不斷變化。任何幫助讚賞;只需要走上正確的軌道。

+0

'int * arrayCopy;'你是否有意轉換爲一個int數組? – Tushar

+0

@Tushar不是故意的,沒有。我曾嘗試過兩次,但這只是使程序崩潰。 –

+0

看看我的答案,然後隨意將所有'int'更改回'double'。應該工作正常。 – Tushar

回答

1

幾個問題:

您使用sizeof(int)。你正在分配一個雙打數組。 Ints與雙打不同。

arrayCopy是一個指向整數的指針。這應該是一個雙指針

您正在返回一個指向int的指針。你應該返回一個指向double的指針。

return語句獲取指針的地址。你只需要返回指針的值。

您不需要for循環。使用memcpy更合理。

+0

根據建議進行了更改 - 非常感謝。但是,每次程序運行時,結果都會有所不同。我假設不應該發生? –

+0

@JesterJeffrey當你說結果時,你的意思是函數返回的值嗎?或者數組中的值? –

+0

函數返回的值。我使用的測試大小和數組保持不變。 –

1

您的退貨聲明不正確。目前,當您實際想要返回一個整數數組(int*)時,您將返回一個指向int數組的指針(int**)。我很驚訝你的編譯器不會抱怨這件事(或者是,但你沒有提到它)。

嘗試:

return arrayCopy; 
0

,當您使用malloc,它返回一個空指針,則需要鍵入強制轉換爲雙。

相關問題