如果我写:
char *a=malloc(sizeof(char)*4);
a="abc";
char *b="abc";
我是否需要释放该内存,还是由我的系统完成?
在您的情况下,您将无法释放动态分配的内存,因为您正在丢失对它的引用。
试试这个:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *a=(char*)malloc(sizeof(char)*4);
printf("Before: %p\n",a);
a = "abc";
printf("After: %p\n",a);
free(a);
char *b = "abc";
return 0;
}
您将获得
Before: 0x100100080
After: 0x100000f50
你会发现两个指针是不同的。这是因为字符串文字"abc"
被放入二进制文件的数据扇区,当你这样做时
a = "abc"
你正在改变指针a
指向常量文字字符串"abc"
并且您将丢失之前分配的内存。呼唤free
on a
不再正确,只是因为它不再指向有效的动态分配地址。要保留指针并能够释放它,您应该使用以下命令复制字符串
strncpy(a, "abc", 4)
这将有效地将字符从文字复制到动态分配的方法,并保留原始指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)