如何解决尝试读取 sizeof() 返回意外结果
这是我的代码。您可能会说,我是 C++ 的完全初学者,尤其是指针。我边做边学,这就是为什么我有那些 Log() 输出,只是帮助我看看我是否做对了一切。我遇到了一个读取变量/数据类型大小的函数,这让我有点困惑。
如果我故意在堆上分配 8 个字节的内存给变量 'buffer',为什么 sizeof() 将 'buffer' 读为 4 个字节?我在这里遗漏了什么/做错了什么/不理解?
#include <iostream>
#define Log(message) std::cout << message << std::endl;
int main()
{
char* buffer = new char[8];
Log(sizeof(buffer));
for (int i = 0; i < 8; i++)
{
*buffer = 10;
Log("Buffer is a variable that takes up 8 bytes of memory and is located on the heap. It holds
the value " << ((std::string*)*buffer) << " located at the memory address " <<
((std::string*)&buffer));
}
system("pause");
}
解决方法
sizeof(x)
告诉您 x
的大小,而不是 x
指向的任何大小。
在一个不相关的注释中,x
没有挂载到 std::string
,因此转换是错误的。
建议:忘记new[]
,使用std::string buffer
。它会为您管理 new[]
和 delete[]
,在您复制、添加字符等时也是如此。
buffer
是一个指针对象。它指向 char[8]
对象(没有名称)的第一个元素,但它本身是一个 char *
。在您的平台上,所有指针都占用 4 个字节。在其他常见平台上,所有指针都占用8个字节。
请注意,您的程序具有未定义的行为,因为您将 *buffer
重新解释为 std::string*
。 char
与 std::string*
完全无关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。