2016-01-21 2 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++. – MikeMB

+0

Ну, я только что начал новую работу и пытаюсь понять код, который у них уже есть, и они использовали memcpy с некоторыми указателями void (которых я никогда не видел до вчерашнего дня), поэтому я пытаюсь понять, как это работает. –

ответ

7

ptr не указывает ни на что, так attemp изменить данные он указывает на приводит к сбою.

Вы, вероятно, хотите сделать memcpy(&ptr, &b, sizeof(b)); (Изменить значение ptr сами)

+3

Кроме того, даже если 'ptr' указывает на что-то,' sizeof (b) 'должен, вероятно, на' sizeof (* b) '. – Florian

+0

Да, это исправлено, спасибо! –