Ответ на оригинальный вопрос
memset(head_ptr,12345,sizeof(int)); // Set Address head_ptr = 12345
Нет, это не так. Это устанавливает первые sizeof(int)
байтов от head_ptr
до 12345, которые будут переполнены (если вы не используете архитектуру, в которой байт превышает 8 бит).
memcpy(testInt,head_ptr,sizeof(int)); // Set testInt = head_ptr
Что такое testInt? Int *? Int? В последнем случае используйте & testInt.
Также из ваших тегов следует, что вы используете C ++, а не C. Но ваш код на самом деле просто C, вам действительно следует использовать более безопасные функции и возможности C ++:
- memset -> std :: fill
- memcpy -> std :: copy
- malloc -> new
- printf -> cout или (лучше) Boost :: Format
Ответ на ваше изменение
int* testInt;
- указатель на целочисленную переменную, но он не инициализирован: он будет указывать на случайную область памяти (мы можем считать ее «случайной» для всех намерений и целей, даже если это не так).
memcpy
затем попытается записать в эту случайную область памяти, к которой, скорее всего, у вас нет доступа, и, следовательно, это приведет к ошибке сегментации (что означает «вы не можете получить доступ к этой области памяти») .