我知道在C ++中我们应该使用new和delete,但为什么使用malloc不是一个好主意?
答案 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将为您处理所有容器调整大小和内存管理,没有麻烦,也没有大惊小怪。