当前位置:  开发笔记 > 编程语言 > 正文

stack&realloc问题C++

如何解决《stack&realloc问题C++》经验,为你挑选了2个好方法。

不,这是完全错误的.realloc只应用于重新分配malloc分配的内存,你所做的只是偶然的,最终会崩溃

char *myString = malloc(x);
myString = realloc(myString,y);
free(myString)

你最好使用new和delete,最好还是使用std :: string.



1> David Sykes..:

不,这是完全错误的.realloc只应用于重新分配malloc分配的内存,你所做的只是偶然的,最终会崩溃

char *myString = malloc(x);
myString = realloc(myString,y);
free(myString)

你最好使用new和delete,最好还是使用std :: string.



2> Brian R. Bon..:

您发布的代码存在一些问题:

是的,您需要释放您使用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名报价的来源

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有