2016-01-21 62 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

是的,这是固定的,谢谢! –