伙计们,我对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;
}
Run Code Online (Sandbox Code Playgroud)
并显示如下输出:
nilai wew : budipergikepasar
nilai wew : kepasarbudisedangpergi
Run Code Online (Sandbox Code Playgroud)
我唯一的问题是,区域1中的内存是否会自动解除分配并替换为新内存?
thx提前
行"tmp = data"没有按照你的想法行事.在C中,使用strcpy()复制字符串.C字符串是char元素的数组.该行将变量tmp设置为变量数据的值,而不是像您想象的那样复制char.
结果是您丢失了对malloc()分配的内存的唯一引用,并导致内存泄漏.