【发布时间】:2020-11-18 13:17:48
【问题描述】:
在循环工作时,我想多次重复使用已经分配的缓冲区:
char *membuf = NULL;
size_t size = 0;
while(1) {
FILE *f = open_memstream(&membuf, &size);
uint8_t iobuf[8192];
int32_t readbytes = 0;
// some I/O here
while(readbytes = read(/*some I/O params here*/) != 0) {
fwrite(iobuf, sizeof(uint8_t), readbytes, f);
}
fclose(f);
// process message, once done, loop for next message
// explicitly NO free of membuf!
}
这可能吗?或者这会导致UB?
【问题讨论】:
-
动态分配内存并在不释放的情况下将其丢弃会导致内存泄漏。如果你这样做太久,程序可能会由于内存不足而崩溃。在更糟糕的情况下,系统可能会进行过多的交换,而不是仅仅使单个应用程序崩溃,而整个系统可能会变慢。