在 C 中按块重新分配 char 数组(字符串)
Reallocating char array (string) by chunks in C
如果我使用块重新分配内存,比方说,我使用 C 中的 getchar() 函数从控制台读取的每十个字符,并使用 counter++ 计算每个新字符(位置),当我完成我说的是,如果我将“\0”添加到数组中的最后一个位置(由计数器标记),我会摆脱多余分配的 space 吗?
例如,如果我想输入人名和姓氏(新行代表我正在处理的字符串数组中的新字符串):
安娜·约翰逊
马克吐温
加布迈克尔森
"Mark Twen" 是 9 个字符,我在字符串末尾添加了一个字符,我已经用完了分配块中的所有 10 个位置。但是 "Gabe Michaelson" 是 15 个字符,如果我在第 16 个位置添加 '\0'(从 1 开始计数;或第 15 个,从 0 开始计数),我会浪费(泄漏???)由 4 个剩余未使用位置表示的内存,还是字符串数组中的每个字符串都有自己的长度而不需要 leakage/using 更多内存?
不,添加 [=10=]
不会释放 space 或以任何方式影响剩余内存。事实上,如果您稍后想要向字符串中添加更多字符,您可以这样做,最多可以分配 space 个字符。
如果你真的想在最后释放内存,唯一的办法就是realloc
把它变小。然而,对于几个字节,这可能不会有太大帮助,因为 malloc
不太可能使用这么小的块,特别是考虑到每个块通常有很多字节的开销.因此,如果您的块大小相对较小,最好不要管它,并接受会浪费几个字节的事实——在大多数情况下它应该是微不足道的。
这不是真正的泄漏,因为当您最终 free()
"Gabe Michaelson" 字符串时,末尾未使用的字节也将被释放。
如果我使用块重新分配内存,比方说,我使用 C 中的 getchar() 函数从控制台读取的每十个字符,并使用 counter++ 计算每个新字符(位置),当我完成我说的是,如果我将“\0”添加到数组中的最后一个位置(由计数器标记),我会摆脱多余分配的 space 吗?
例如,如果我想输入人名和姓氏(新行代表我正在处理的字符串数组中的新字符串):
安娜·约翰逊
马克吐温
加布迈克尔森
"Mark Twen" 是 9 个字符,我在字符串末尾添加了一个字符,我已经用完了分配块中的所有 10 个位置。但是 "Gabe Michaelson" 是 15 个字符,如果我在第 16 个位置添加 '\0'(从 1 开始计数;或第 15 个,从 0 开始计数),我会浪费(泄漏???)由 4 个剩余未使用位置表示的内存,还是字符串数组中的每个字符串都有自己的长度而不需要 leakage/using 更多内存?
不,添加 [=10=]
不会释放 space 或以任何方式影响剩余内存。事实上,如果您稍后想要向字符串中添加更多字符,您可以这样做,最多可以分配 space 个字符。
如果你真的想在最后释放内存,唯一的办法就是realloc
把它变小。然而,对于几个字节,这可能不会有太大帮助,因为 malloc
不太可能使用这么小的块,特别是考虑到每个块通常有很多字节的开销.因此,如果您的块大小相对较小,最好不要管它,并接受会浪费几个字节的事实——在大多数情况下它应该是微不足道的。
这不是真正的泄漏,因为当您最终 free()
"Gabe Michaelson" 字符串时,末尾未使用的字节也将被释放。