Я экспериментировал с указателями void, и я столкнулся с следующей проблемой. Когда я скомпилировал следующий код, все было в порядке, но когда я запустил его на своей машине, это не дало бы мне результатов вместо подсказки. Программа перестала работать (https://drive.google.com/file/d/0B1mLcnk8kTFUeEtmYnlOaWJ6T3c/view?usp=sharing), я не могу понять, что происходит за кулисами , есть ли какая-либо проблема в отношении разыменования указателя void
.разыменование указателей void с литьем
Дальше он будет работать, если я использую прокомментированный код вместо оригинального.
#include<stdio.h>
int main()
{
void* ptr;
int dupe = 5;
*(int*)ptr = dupe; // ptr = &dupe;
printf("The value at ptr is %3d",*(int*)ptr);
}
Я использую gcc на CodeBlocks.
В строке 6 вы разыменования указателя который указывает нигде (он содержит нежелательный адрес), и вы пытаетесь поместить значение 'dupe' там (т.е. в никуда). – Sergey
Обратите внимание, что '* (int *) ptr = dupe;' NOT 'ptr = &dupe;'. Второе задание абсолютно корректно и не вызывает неопределенного поведения. – Sergey
Возможно ли, что при некоторой компиляции допустимый адрес нежелательной почты действителен? – BigO