鱼C论坛

 找回密码
 立即注册
查看: 3719|回复: 4

free函数问题

[复制链接]
发表于 2013-4-24 11:39:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. main()
  2. {
  3.         int *a;
  4.         a=(int*)malloc(0);
  5.         a[0]=1;
  6.         cout<<'y'<<endl;
  7.         free(a);
  8. }
复制代码
a[0]=1;
为什么会使程序中止

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-24 11:47:27 | 显示全部楼层
malloc 的参数不能是 0
那是未定义行为

性质雷同于 i=i++
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-24 11:50:05 | 显示全部楼层
  1. a=(int*)malloc(0);
复制代码
楼主位a指针申请的内存空间为0,程序当然会终止了。不过我没看懂楼主想法。楼主是想用动态数组吗。动态数组的a=(int*)malloc(sizeof(int)*num); 这里的num是一个整型变量,为动态数组的个数,楼主要在使用前定义。如果楼主是想用指针的话:a=(int*)malloc(sizeof(int)); *a = 1;这样的话,程序也是可以滴。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-24 23:52:24 | 显示全部楼层
我用的是visual c++6.0,编译器比较弱,发现对于释放的动态空间仍然可以赋值,如果去掉a[0]=1,则可以继续运行
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-24 23:55:58 | 显示全部楼层
  1. int &fun()
  2. {
  3.         int tem=1;
  4.         cout<<"fun:  "<<endl<<tem<<endl;
  5.         return tem;
  6. }
  7. main()
  8. {
  9.         int &temp=fun();
  10.         temp++;
  11.         cout<<temp<<endl;
  12. }
复制代码
如上面程序中,temp引用的是tem,但是tem已经释放掉了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-31 22:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表