char *之后无法释放内存

时间:2016-01-19 19:09:38

标签: c free

当我尝试在程序结束时释放内存时,我遇到了问题。它一直在打破。你能告诉我问题在哪里吗?

int main() {

char* word = NULL;
int i = 0;
char str1[12] = "oko";

while (str1[i]) {
    str1[i] = tolower(str1[i]);
    i++;
}

printf("%s", str1);

word = (char *)malloc(strlen(str1) + 1);
word = str1;
printf("%s", word);

free(word);
system("pause");

return 0;
}

1 个答案:

答案 0 :(得分:7)

在您的代码中,通过说

word = str1;
  1. 您正在覆盖malloc() - ed指针
  2. 造成内存泄漏。
  3. 稍后,通过free()上的word调用,您将重新调用undefined behavior,因为malloc()或函数系列不再返回指针。

    解决方案:您应该使用strcpy()复制字符串的内容。

    那就是说,

    1. Please see this discussion on why not to cast the return value of malloc() and family in C.
    2. int main()至少应为int main(void),以符合标准。