2016-01-21 4 views
1

Donc, je sais que le code suivant peut utiliser '=' et être beaucoup plus facile et meilleur, mais j'essaie de mieux comprendre memcpy pour les applications plus complexes. Quand j'utilise "ptr = b", j'obtiens une sortie de "1", ce à quoi je m'attends. En utilisant memcpy, il segmente.Pourquoi le segment de memcpy est-il en défaut?

#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

* « mais je suis en train de memcpy mieux comprendre pour des applications plus complexes » *. En fait, il y a rarement une raison d'utiliser 'memcpy' en C++. – MikeMB

+0

Eh bien, j'ai juste commencé un nouveau travail et j'essaie de comprendre le code qu'ils ont déjà en place, et ils ont utilisé memcpy avec quelques pointeurs de vide (que je n'avais jamais vu hier) alors j'essaie de comprendre comment cela fonctionne. –

Répondre

7

ptr ne pointe pas à quoi que ce soit, si attemp pour modifier les données il pointe conduit à tomber en panne.

Vous voulez probablement faire memcpy(&ptr, &b, sizeof(b)); (Modifier la valeur de ptr lui-même)

+3

De plus, même si 'ptr' pointe vers quelque chose,' sizeof (b) 'devrait probablement avoir' sizeof (* b) '. – Florian

+0

Yup, c'est réglé, merci! –