void *ptr;
*(int*) ptr=12;
在此之后,我不明白为什么&ptr
给我运行时错误。
虽然ptr
和*ptr
当然运行良好。
答案 0 :(得分:3)
void *ptr;
ptr
指向哪里?我打赌,到了街上的咖啡馆。或者甚至可能是某种虫洞!
*(int*) ptr = 12;
所以你构建了一个void指针,指向谁知道什么指向int的指针,然后你取消引用它为它分配整数12.这将覆盖内存中的一些随机位置。如果你很幸运,程序不会崩溃。如果你运气不好,你的电脑就会爆炸。
所以,总结并重新解释你的问题,你问我们:“嗯,我正在取消引用一个我没有初始化的指针并指向who-know-where。为什么我的程序会崩溃?“我有这个权利吗?
答案 1 :(得分:2)
首先,你制作一个指向随机地址的指针
void *ptr;
然后,您尝试将值12存储到该随机地址,从而导致未定义的行为,因为您尚未为ptr
分配任何内存