-7

我正在尝试分析 C++ 程序中的一些代码(我对 C++ 很陌生),但我没有得到以下代码试图完成的任务。
根据我在这里阅读的线程,设置指向 deadbeef 的指针将使指针为空。但是,Visual Studio 不允许我这样做并给我一个错误。我不知道第二个指针应该做什么。任何输入将不胜感激。

long* firstpointer = (long *)((void *)0);
char* secondpointer = (char*) ((void *)0);

*firstpointer = 0xDEADBEEF;
strcpy(secondpointer,"Here is some text, here is some more");
4

1 回答 1

3

根据我在这里阅读的线程,设置指向 deadbeef 的指针将使指针为空。

不,这是不正确的。虽然deadbeef是常见的“废话模式”,但绝对不是平等null的。将指针(更一般地,内存区域)设置为已知且不寻常的模式的一个常见原因deadbeef是检测内存的未初始化区域。通常用于表示null指针的全零模式不是很好的候选者,因为在连续内存位置中找到零序列的机会比找到deadbeefs 序列的机会要高得多。

您在调用中看到的崩溃是strcpy因为secondpointer设置为无效值。您需要分配足够的内存来适应"Here is some text, here is some more",以及它的终止零,以免strcpy表现出未定义的行为。

于 2013-04-01T03:01:47.040 回答