【发布时间】:2020-05-25 17:44:59
【问题描述】:
我想测试一下自己的知识,写了一个小程序,如下所示:
#include <iostream>
#include <cstdlib>
int main()
{
int* mem1 = (int*) malloc(2 * sizeof(int));
int* mem2 = (int*) malloc(5 * sizeof(int));
std::cout << "mem1: " << sizeof(mem1) << std::endl;
std::cout << "mem2: " << sizeof(mem2) << std::endl;
return 0;
}
我得到了输出:
mem1: 8
mem2: 8
当我将 malloc(2 * sizeof(int)) 更改为 malloc(3 * sizeof(int)) 的值时,输出也不会改变。
This 是我使用的教程,所以我不完全确定,如果这是内存安全的,在调用malloc 时转换为int*。
我还发现了this 问题,但我认为它对我的情况没有多大帮助。
Clang++ 是我使用的编译器,但我认为它没有任何区别。
我最好的猜测是,它分配了相同的内存,因为它不知道内存在哪里结束。
【问题讨论】:
-
你不应该像这样在 C++ 中使用
malloc。目前从技术上讲,在不干预placement-new 的情况下使用malloced 内存始终是未定义的行为,并且在实践中对于非平凡的类型肯定会中断。您应该使用new,甚至最好根本不使用手动动态内存管理。你应该改用std::vector。 -
链接教程站点提到的所有库函数,除了
<iostream>,都是继承到C++中的C库函数。该站点实际上并未教授 C++ 标准库。我建议你不要用它来学习 C++。 -
sizeof不会做你认为的那样。你想要std::size 吗?另外,为什么你在 C++ 程序中使用malloc?int* mem1 = (int*) malloc(2 * sizeof(int));在一个理智的 C++ 程序中你永远不会这样做。 C 风格的演员表应该就可以了,但即使这样,其余的都是错误的。查找std::vector。