使用 malloc后free出错 错误所在
2018-06-05 23:44
260 查看
偶认为:
这个问题是指针使用过程中很容易出错而且自己又很难发现的一个易疏忽问题———–即:指针人为的更改了原来的指向地址。以下是一个很好的案例,其中红色字体为正确解。
问题:
用malloc与free出错,望指导,谢谢
程序很简单,用于测试他们的用法,因为在一个大点定程序中出错想找原因。
问题补充:
哦,大概明白了点,谢谢。
我用sprintf(test,”23123141421%s”,test1);给char test赋值,但是如果不chartest=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出错,望指导,谢谢
程序很简单,用于测试他们的用法,因为在一个大点定程序中出错想找原因。
#include<stdlib.h> void main() { char *test=malloc(100); test="123"; free(test); test=NULL; }
问题补充:
哦,大概明白了点,谢谢。
我用sprintf(test,”23123141421%s”,test1);给char test赋值,但是如果不chartest=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崩溃错误解决
- Symbian 中使用malloc 不报 Panic KERN-EXEC 3错误的方法
- 使用cas登录出错,本地没有错误,环境上报错
- 关于c语言内存分配,malloc,free,和段错误,内存泄露
- malloc free和new delete的使用
- C# 如何获取出错的错误所在行数信息[原创]_C#教程_脚本之家
- 从一个简单程序的GDB调试看段错误,指针的初始化及内存分配(malloc/free)
- C++中malloc/free和new/delete 的使用
- malloc()和free()的使用
- 解决“提示错误: 无法对 表或索引视图'T_shili' 使用 CONTAINS 或 FREETEXT 谓词,因为它未编制全文索引。 ”
- new/delete和malloc/free的使用场合和区别
- malloc、free的使用
- free使用中的常见错误
- 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
- malloc后,再free 却出错
- 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。