我正在尝试分析C ++程序中的一些代码(我是C ++的新手),我不知道下面的代码试图完成的内容。
基于我在这里读到的线程,设置指向deadbeef的指针将使指针为null。但是,visual studio不允许我这样做并给我一个错误。我不知道第二个指针应该做什么。任何输入将不胜感激。
long* firstpointer = (long *)((void *)0);
char* secondpointer = (char*) ((void *)0);
*firstpointer = 0xDEADBEEF;
strcpy(secondpointer,"Here is some text, here is some more");
答案 0 :(得分:3)
根据我在这里读到的线程,设置指向deadbeef的指针会使指针为null。
不,那是不正确的。虽然deadbeef
是一种常见的“无意义模式”,但肯定不等于null
。将指针(更一般地说,存储区域)设置为已知且不常见的模式(例如deadbeef
)的常见原因是检测未初始化的存储区域。通常用于表示null
指针的所有零的模式不是一个好的候选者,因为在连续的内存位置中找到零序列的几率远远高于查找{{1 }}第
您在deadbeef
调用中看到的崩溃是因为strcpy
设置为无效值。您需要分配足够的内存以适应secondpointer
及其终止零,以使"Here is some text, here is some more"
不会出现未定义的行为。