malloced数组和新建数组之间有区别吗?

mon*_*ing 5 c c++ arrays malloc new-operator

我通常用c ++编程,但是我的char*使用了一些clibrary函数.一些像'getline'这样的联机帮助页说,输入应该是一个malloced数组.

可以,使用'new'代替吗?

我可以看到我的小样本它可以工作,但这可能在某些时候会导致一些奇怪的未定义行为?

我知道'new'应该与'delete'匹配,'malloc'与'free'匹配.

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

谢谢

Mar*_*ork 13

传递给getline()的缓冲区必须是malloced.

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

像free()这样的realloc()只能用于malloc()分配的内存.这是因为malloc()和new从不同的存储区域分配内存:

请参阅:new/delete和malloc/free之间有什么区别?

基本上new使用"The Free Store",而malloc使用"The Heap".这两个区域都是"应用程序堆"的一部分(虽然标准实际上不需要应用程序堆,因为这是一个实现细节).虽然它们两者都在"应用堆"上,这些区域不需要重叠.它们是否是实施细节.

getline()的手册页:

注意这一行:

或者,在调用getline()之前,*lineptr可以包含指向malloc()的指针 - 分配的缓冲区*n个字节的大小.如果缓冲区不足以容纳该行,则getline()使用realloc()调整其大小,根据需要更新*lineptr和*n.

  • @Martin:你指的是GCC扩展功能"getline".我不认为推荐使用这种非便携式功能太棒了,尤其是新手 (2认同)