由网友(她是黑暗却给我阳光)分享简介:我对C语言还很陌生(这实际上是我第一次使用指针赋值),而且我找不出这个错误...以下是我的代码:void str_rv(char c[]) {int i, len = str_ln(c);char *rev = (char*)calloc(len, sizeof(char));check_mem(rev);for (i...
我对C语言还很陌生(这实际上是我第一次使用指针赋值),而且我找不出这个错误...
以下是我的代码:
void str_rv(char c[]) {
int i, len = str_ln(c);
char *rev = (char*)calloc(len, sizeof(char));
check_mem(rev);
for (i = 0; i < len; ++i) {
rev[i] = c[len - (i + 1)];
}
rev[len] = '';
str_cpy(rev, c);
printf("Current string is ");
str_print(c);
putchar('
');
free(rev);
}
在此函数中,我试图反转从sacnf()
获得的字符串。
当我调试它时,它运行得很好,直到我使用free()
的最后一行。我在网上读了一些书,我相信这是我试图找回这段记忆的唯一地方。
帮助?
推荐答案
您正在覆盖此处的数组界限:
rev[len] = '';
您仅分配了len
个字符。相反,您可以分配len +1
个字符。
从而导致undefined behaviour。这可能导致元数据损坏,从而导致free()
失败。
也是don't cast the return of malloc()/calloc()
etc。您还应该检查calloc()
是否成功。
相关推荐
最新文章