我有个关于C语言记忆的问题
请参阅以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *tesaja(char *data)
{
char *tmp = (char*)malloc(sizeof(char) * strlen(data));
tmp = data;
return tmp;
}
int main()
{
//area 1
char *wew = tesaja("budipergikepasar");
printf("nilai wew : %s\n",wew);
//area 2
wew = tesaja("kepasarbudisedangpergi");
printf("nilai wew : %s\n",wew);
return 0;
}
并显示如下输出:
nilai wew : budipergikepasar
nilai wew : kepasarbudisedangpergi
我唯一的问题是,
区域1中的内存是否会自动释放并替换为新内存?
线等回答
最佳答案
“tmp=data”一行并没有做您认为的事情。在C中,使用strcpy()复制字符串。C字符串是char元素的数组这一行是将变量tmp设置为变量数据的值,而不是像您想象的那样复制字符。
结果是丢失了对malloc()分配的内存的唯一引用,并导致内存泄漏。
关于c - 内存替换在C?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5887762/