2016-01-21 66 views
1

所以我知道下面的代碼可以使用'='並且更容易和更好,但是我想更好地理解更復雜的應用程序的memcpy。當我使用「ptr = b」時,我得到了「1」的輸出,這正是我所期望的。在使用memcpy時,它會出現段錯誤。爲什麼memcpy seg錯誤?

#include <string.h> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int a = 1; 
    int *b = &a; 
    void* ptr; 
    memcpy(ptr, b, sizeof(b)); 
    int *c = (int *)ptr; 

    cout<<*c<<endl; 

    return 0; 
} 
+0

*「但我想對於更復雜的應用更好地瞭解memcpy的」 *。實際上,在C++中幾乎沒有理由使用'memcpy'。 – MikeMB

+0

嗯,我剛開始了一項新工作,並試圖理解他們已有的代碼,並且他們使用了一些無效指針(我昨天從未見過)的memcpy,所以我試圖瞭解它是如何工作的。 –

回答

7

ptr不指向任何東西,所以試圖改變它指向導致崩潰的數據。

你可能想要做memcpy(&ptr, &b, sizeof(b));(的ptr變化值本身)

+3

另外,即使'ptr'指向某些東西,'sizeof(b)'應該可以用'sizeof(* b)'。 – Florian

+0

是的,這是固定的,謝謝! –