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.