gpt4 book ai didi

c++ - malloced 数组和新数组之间有区别吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:51 26 4
gpt4 key购买 nike

我通常使用 C++ 编程,但正在为我的 char* 使用一些库函数。一些像“getline”这样的联机帮助页说输入应该是一个 malloced 数组。

可以改用“new”吗?

对于我的小样本,我可以看到它有效,但这会不会在某个时候导致一些奇怪的未定义行为?

我知道“new”应该匹配“delete”,而“malloc”应该匹配“free”。

我也没有使用 std::string。这是故意的。

谢谢

最佳答案

传递给 getline() 的缓冲区必须被分配。

原因是如果需要更多空间,getline() 可能会在缓冲区上调用 realloc()。

realloc() 与 free() 类似,只能与 malloc() 分配的内存一起使用。这是因为 malloc() 和 new 从不同的存储区域分配内存:

参见:What is the difference between new/delete and malloc/free?

基本上 new 使用“免费存储”,而 malloc 使用“堆”。这两个区域都是“应用程序堆”的一部分(尽管标准实际上并不需要应用程序堆,因为那是一个实现细节) . 虽然它们都在“应用程序堆”上,但这些区域不需要重叠。它们是否重叠是实现的细节。

getline() 的手册页:

注意这一行:

Alternatively, before calling getline(), *lineptr can contain a pointer to a malloc()-allocated buffer *n bytes in size. If the buffer is not large enough to hold the line, getline() resizes it with realloc(), updating *lineptr and *n as necessary.

关于c++ - malloced 数组和新数组之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com