不,这是完全错误的.realloc只应用于重新分配malloc分配的内存,你所做的只是偶然的,最终会崩溃
char *myString = malloc(x); myString = realloc(myString,y); free(myString)
你最好使用new和delete,最好还是使用std :: string.
不,这是完全错误的.realloc只应用于重新分配malloc分配的内存,你所做的只是偶然的,最终会崩溃
char *myString = malloc(x); myString = realloc(myString,y); free(myString)
你最好使用new和delete,最好还是使用std :: string.
您发布的代码存在一些问题:
是的,您需要释放您使用malloc和realloc分配的所有内容,以及其他相关的C样式内存分配函数.
我认为你的意思是char*myString,而不是char.传递堆栈中某些东西的地址(你的字符)是完全错误的.
在realloc中使用之前,需要将myString char指针初始化为NULL.
你应该将4传递给strncpy而不是5,如果你有一个更大的字符串,你将覆盖内存.
您应该释放在示例中创建的缓冲区
您应该检查realloc调用的返回值.realloc的()
[关于realloc的返回值:]在成功完成大小不等于0时,realloc()返回指向(可能已移动)分配空间的指针.如果size为0,则返回空指针或可成功传递给free()的唯一指针.如果没有足够的可用内存,realloc()将返回一个空指针并将errno设置为[ENOMEM].
传入NULL时,重新分配将像malloc一样工作:
如果ptr是空指针,则realloc()的行为类似于指定大小的malloc().
更多C++方法:
您将此标记为C++,并且使用C++的新运算符更安全.虽然新运算符不允许重新分配,但它可用于分配和重用现有缓冲区(placement new).
char *myString = new char[5]; strncpy(myString, "test", 4); //... delete[] myString;
甚至:
#include//... std::string str = "test";
前2名报价的来源