【发布时间】:2016-07-16 03:30:10
【问题描述】:
我已经尝试过dataPoolBuffer = realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));,但 Xcode 报告:assigning to 'char *' from im compatible type 'void'。
我创建了一个类:
class solutionBuffer{
private:
char * dataPoolBuffer;
char * consumerBuffer;
char * flagBuffer;
int dataPoolSize;
int consumerBufferSize;
mutex safe;
public:
solutionBuffer(){
safe.lock();
dataPoolSize = 0;
consumerBufferSize = 0;
dataPoolBuffer = (char*)malloc(sizeof(char)*1);
consumerBuffer = (char*)malloc(sizeof(char)*1);
flagBuffer = (char*)malloc(sizeof(char)*1);
}
int add(char* data, int length)
{
dataPoolSize += length;
realloc(dataPoolBuffer, sizeof(char)*(dataPoolSize));
realloc(flagBuffer, sizeof(char)*(dataPoolSize));
memcpy(dataPoolBuffer + dataPoolSize - length, data, sizeof(char)*(length));
return 0;
}
~solutionBuffer(){
printf("%d",strlen(dataPoolBuffer));
free(dataPoolBuffer);
free(consumerBuffer);
free(flagBuffer);
safe.unlock();
}
};
每次调用.add函数时,它都会为变量realloc内存。但是,当我在main() 中这样做时:
char data[] = "0123456789";
char data2[] = "01234567890123456789";
solutionBuffer buffer;
buffer.add(data, 10);
buffer.add(data2, 20);
xoce 显示:当它试图释放 dataPoolBuffer 时,未在 ~solutionBuffer() 中分配被释放的指针。
为什么会这样?如何解决?
【问题讨论】:
-
这里有这么多错的地方,我什至不知道从哪里开始:
malloc,大小为0;在 C++ 代码中使用malloc和free;首先是不必要的动态分配。名单还在继续,一直在,一直在…… -
即使我将malloc修改为1,它仍然显示错误消息。 C++ 与 C 风格兼容。为什么不能在 C++ 中使用它
-
我理解使用
realloc的原因。但是我想知道您认为在类的构造函数中(错误地)锁定互斥锁的可能原因是什么,其中 said-same 仅修改实例成员变量。您是否期望多个线程同时构造同一个对象?或者您在我希望它被锁定的方法中忽略了所述互斥锁(但不是您的操作方式),例如您的add方法。如果不需要重现您的发现,请在您的帖子中删除它。 -
关于您的实际问题,您认为
realloc的result 是for 吗?我认为您应该查看它返回的内容,以及为什么忽略它是一个 bad 的想法。了解realloc的工作原理,因为您使用它错误。 -
@SamVarshavchik malloc(0) 没问题