【发布时间】:2017-07-29 07:07:29
【问题描述】:
以示例代码为例*:
char *string = (char*)malloc(sizeof(char));
strcat_s(string, strlen(string) + 10 + 1, "characters");
上面的代码编译并运行,让我相信内存重新分配正在发生。但是,当以更大的规模应用时(也以递归方式),我会在随机位置收到内存错误(每次运行程序时都不同)。
strcat_s() 会超出边界吗?因此需要 realloc() 来确保正确分配内存吗?
注意:这些错误可能是无关的,尽管它们是在应用示例中的代码后偶然出现的。
*我最初只分配一个字节的原因是,在上下文中我使用的是动态大小,所以string 的大小会改变,但幅度未知。
【问题讨论】:
-
检查reference:如果目标数组对于 src 和 dest 的内容以及终止空字符都不够大,则行为未定义。
-
我不建议在 C++ 中使用
malloc、strlen或strcat_s。有更好的工具。 -
@FredLarson 非常好——我考虑过使用 std::string,但感觉有点像作弊。但考虑到大规模手动内存管理的艰巨性,我想我可能不得不这样做。
-
在工作中使用正确的工具并不是作弊。
-
"让我相信内存重新分配正在发生" - 没有一个标准的 str*** 函数分配内存。