c - C中的内存替换?

标签 c memory malloc

伙计们,我有一个关于 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 设置为变量数据的值,而不是像您想象的那样复制 char。

结果是您丢失了对 malloc() 分配的内存的唯一引用并导致内存泄漏。

关于c - C中的内存替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887762/

相关文章:

c - 解密(AES)和解码(Base64)后得到错误的纯文本

assembly - 如何在 64 位 NASM 中使用 malloc 和 free?

c - 如何在 Makefile.am 中使用条件

c - 链表: C: does not store the values I am looking for

c - 一旦超出范围,C 是否会重用本地 block var 的内存?

python - 带有python : where is data stored before commit?的sqlite3

c macOS 中的段错误;有时,有时不

c - 访问结构数组会出现段错误

c - 为什么在向后打印文本文件的程序中调用 fseek 时应使用偏移量 -2 而不是偏移量 -1?

objective-c - 圆弧 : Memory does not get reclaimed?