-6
void *ptr;
*(int*) ptr=12;

在此之后,我不明白为什么&ptr会给我运行时错误。虽然当然运行良好ptr*ptr

4

2 回答 2

3
void *ptr;

ptr指向哪里?我敢打赌,去街上的咖啡店。或者甚至可能是某种虫洞!

*(int*) ptr = 12;

因此,您将一个指向谁知道什么的 void 指针转换为指向 int 的指针,然后取消引用它以为其分配整数 12。这将覆盖内存中的一些随机位置。如果幸运的话,程序不会崩溃。如果你不走运,你的电脑会爆炸。

因此,总结和改写您的问题,您是在问我们:“嗯,我正在取消引用一个我尚未初始化的指针,并指向谁知道在哪里。为什么我的程序会崩溃? ”我说得对吗?

于 2013-03-21T22:59:30.673 回答
2

首先,您创建一个指向随机地址的指针

void *ptr;

然后,您尝试将值 12 存储到导致未定义行为的随机地址,因为您没有为ptr

于 2013-03-21T22:56:12.720 回答