使用 malloc后free出错 错误所在
2012-03-15 23:25
190 查看
偶认为:
这个问题是指针使用过程中很容易出错而且自己又很难发现的一个易疏忽问题-----------即:指针人为的更改了原来的指向地址。以下是一个很好的案例,其中红色字体为正确解。
问题:
用malloc与free出错,望指导,谢谢
程序很简单,用于测试他们的用法,因为在一个大点定程序中出错想找原因。
#include<stdlib.h>
void main()
{
char *test=malloc(100);
test="123";
free(test);
test=NULL;
}
问题补充:
这个问题是指针使用过程中很容易出错而且自己又很难发现的一个易疏忽问题-----------即:指针人为的更改了原来的指向地址。以下是一个很好的案例,其中红色字体为正确解。
问题:
用malloc与free出错,望指导,谢谢
程序很简单,用于测试他们的用法,因为在一个大点定程序中出错想找原因。
#include<stdlib.h>
void main()
{
char *test=malloc(100);
test="123";
free(test);
test=NULL;
}
问题补充:
哦,大概明白了点,谢谢。 我用sprintf(test,"23123141421%s",test1);给char *test赋值,但是如果不char*test=malloc();就出错,用了也用free就出错,不free就不出错。。。 为什么呢,请问?学习C不久。。。问题有点无趣,但就是不明白,请指教 谢谢
回答1:
前面我接到了,free()只用于释放动态分配的空间,即malloc()/calloc()/realloc()函数分配的空间,否则不会成功. ************************************** test="123"; 这样,test就指向了一个常量的地址,而不再是malloc()分配的空间地址,而free()只用于释放动态分配的空间,所以出错. 要想将"123"字符串放在test数组中,应该用strcpy()函数完成,或者对test数组的每个元素进行单独赋值.就是说要用memcpy或者strcpy将字符赋给test,而不能直接给test赋值 这样会改变地址。
回答2:
你的意思想是想把“123"放到刚用malloc函数开辟的空间中去,从结构来分析,”123“这个字符串并没有放你原先开辟的空间中去。另外,malloc和free一般是配合来使用的,你后来test这个指针指向的已不是malloc开辟的区域了。也就是楼上所说的,free智能只能释放动态内存。弄明白就行了。我也学习了。
malloc后free出错总结: 1、malloc与free配套使用。不要跨进程分配和释放; 2、指向malloc申请的堆内存的指针,在运用过程中千万不要另外赋值,否则同样导致内存泄露(我曾今翻过这样的错误) 3、malloc后,实际使用时指针长度超过了你申请的范围。再去free时肯定出问题。4、改变指针的初始指向地址,如上文。 |
相关文章推荐
- 使用 malloc后free出错 错误所在
- 使用 malloc后free出错 错误所在
- 使用 malloc后free出错 错误所在
- c语言,for循环中使用malloc和free出现运行错误:no source available...
- 使用malloc/new后free/delete崩溃错误解决
- 如何让keil 支持malloc()、calloc()、free() —— MicroLIB 简介和使用
- free和malloc的使用
- 使用malloc、calloc函数分配内存空间和存储内容不匹配时引发的错误!
- malloc/free和new/delete的区别及使用要点(转)
- 从一个简单程序的GDB调试看段错误,指针的初始化及内存分配(malloc/free)
- C语言结构体结合malloc、free使用小例子
- Libcurl使用OpenSSL编译出现undefined reference to `COMP_CTX_free'错误备忘
- malloc/free和new/delete的主要区别以及c与c++关于结构体定义使用的区别
- free和malloc的使用
- 使用malloc()和free()函数分配和释放内存
- C++中malloc/free和new/delete 的使用
- 关于c语言内存分配,malloc,free,和段错误,内存泄露
- malloc和free的使用
- 【让你的C++程序更加高效】条款03:尽量使用new/delete而不是malloc/free
- 使用cas登录出错,本地没有错误,环境上报错