【发布时间】:2016-06-19 16:52:14
【问题描述】:
很遗憾,我不得不承认我一直在尝试自学 c++,但在指针方面我真的很困惑。
有人可以向我解释为什么这不起作用吗?我没有遇到任何分段错误。它编译我什么也没得到。
#include <iostream>
#include <cstdlib>
#include <cstring>
int main(){
void *buffer = new char[8];
memset( (char*)&buffer, 'a', sizeof(buffer) );
std::cout << (char*)buffer <<std::endl;
return 0;
}
【问题讨论】:
-
你不走运。我得到了Segmentation Fault。
-
尝试从缓冲区中删除 &。它已经是一个指针。您正在获取指针的地址。
-
"我没有遇到任何分段错误。它编译我什么也得不到。" -- 编写 C++ 时必须意识到的第一件事(或最早)之一代码是 1) 编译好的代码并不意味着程序是好的,并且 2) C++ 有一个称为 未定义行为 的概念。这就是你的代码所展示的。
-
sizeof告诉您一个类型占用的字节数。所以你所做的只是说sizeof(void *),通常是 4 或 8。 -
@mreff555 您的代码存在多个问题。答案涵盖了大多数,其中一个(到目前为止)没有提到是你没有打电话给
delete [] buffer;。尽管这是一个玩具程序,但不要养成分配内存的坏习惯,也不要担心释放它。
标签: c++ pointers memory allocation