正在释放的指针未在构造函数中使用realloc和malloc分配

时间:2016-07-16 03:30:11

标签: c++ pointers free realloc

我知道在C ++中我们应该使用new和delete,但为什么使用malloc不是一个好主意?

2 个答案:

答案 0 :(得分:1)

当您调用realloc()时,需要将结果分配回指针变量。 realloc()经常需要将内存移动到新位置,然后返回该位置。您的代码将变量指向旧位置,并在您尝试使用它之后获得未定义的行为。

所以它应该是:

dataPoolBuffer = (char*)realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));

flagBuffer = (char*)realloc(flagBuffer, sizeof(char)*(dataPoolSize));

答案 1 :(得分:1)

According to the documentation

realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));

重新分配dataPoolBuffer,但不会更改dataPoolBuffer点的位置。因此dataPoolBuffer现在指向无效内存的可能性非常大。

dataPoolBuffer = (char*)realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));

会为你做你想做的事,但重新考虑你是如何做到这一点的。你正在为自己设置很多痛苦。 Your class violates The Rule of Three, for one thing. std::vector将为您处理所有容器调整大小和内存管理,没有麻烦,也没有大惊小怪。