2015-10-22 103 views
-1

在下面的循環中,我試圖複製存儲在voidPtr地址處的數據。這裏的數據已知是長度計數的整數數組。我讀過將這個數組轉換爲int,然後執行副本(如下所示)應該可以工作。複製存儲在虛數指針Int數組中的Int數組

int intArr[count]; 
    for (int i = 0; i<count; i++){ 
    intArr[i] = ((int*) voidPtr)[i]; 
    } 

但是,當我試圖通過int打印int數組時,我收到一個seg-fault。

for (int i = 0; i<count; i++){ 
    printf("%d ", intArr[i]); 
    } 

任何想法?

+2

首先,你應該只是'memcpy(intArr,voidPtr,count * sizeof(int));'副本(它更簡單,更高效)。其次,你可以請張貼更多的代碼。你顯示的內容似乎並不包含特定的錯誤。 – 865719

+0

正如@ 865719所提到的,您需要提供一個顯示問題的完整示例。如果你所有的假設都是正確的(你沒有提供代碼),上面的代碼就可以工作。 [Here](http://cpp.sh/8aqh)就是一個例子。您可能還想重新考慮您的設計,因爲使用'void *'來傳遞其他類型不是一個好的設計實踐,並且很容易讓您陷入困境。 – crayzeewulf

+0

@ 865719,使用malloc和memcpy解決了這個問題。我假設我創建的容器大小不夠大。非常感謝這個建議,並且我會盡力在未來的帖子上更加透徹一點。 – mongolol

回答

0

你做錯了什麼,當編譯器警告你時,你只需關閉它即可。不,你已經在腳下開槍了,應該責怪誰? :)

你所做的就是說voidPtr現在變成了一個int *,並且請訪問它的元素i。這不可能是正確的。最有可能的是,在你的系統上,void *與int *不一樣,所以使用這個強制轉換你將會訪問不正確的元素。此外,你的虛擬*似乎並沒有指向足夠大的位置 - 這是導致崩潰的原因。

不要在C++中使用void *,不要強制轉換。

+1

你似乎很困惑。 – haccks

+0

我不是。 OP是。我對這個voidPtr的性質做了一些假設 - 它的定義沒有提供。 – SergeyA