【发布时间】:2019-02-21 22:00:24
【问题描述】:
我想阅读几个文件并在内容中添加几行文本。我想将新更改的内容保存在缓冲区中。这些文件的大小可以从 0 字节到 16 MB。通过添加文本行,文件也可以更大,具体取决于内容。
一开始,我用 calloc 预留了 512 字节的内存。
wchar_t *buffer = (wchar_t*)calloc(512, sizeof(wchar_t));
每当将文本添加到内存时,我都会使用函数 realloc 检查保留内存的大小是否仍然足够。这仅适用于程序崩溃的较大文件的小文件。很遗憾,因为星座的关系,无法进行调试。
现在我的问题。 如果我用 realloc 重复扩展内存但它失败了,那么带有 buffer == NULL 的 if 语句是否正确?缓冲区理论上不能为零,因为它之前已经被填满了。
我怎样才能干净地捕捉错误或修复它?
size_t memoryallocated = 512;
wchar_t *buffer = (wchar_t*)calloc(memoryallocated , sizeof(wchar_t));
while (memoryuse + contenlength >= memoryallocated)
{
memoryallocated *= 2;
buffer = (wchar_t *)realloc(buffer, memoryallocated* sizeof(wchar_t));
if ((buffer == NULL))
{
return NULL;
}
}
wmemcpy(buffer + memoryuse, contentbuf,contenlength);
memoryuse += contenlength; // thx @pm100
return buffer;
【问题讨论】:
-
很遗憾,由于星座,无法进行调试 -- 什么?
-
我想你的意思是
memoryused += contenlength -
我正在使用 API,需要在程序中打开文件,无法调试。
-
崩溃怎么办?听起来您可能遇到了过度使用的问题。您可以捕获信号并打印其详细信息...
-
@o11c 那是API和程序的问题。我无法在任何地方发现错误并看到工作。有时我会在错误日志中收到以下消息。 (页面保护错误)在偏移量 1: 00001F70 [sys]