鱼C论坛

 找回密码
 立即注册
查看: 1126|回复: 2

[已解决]两数之和

[复制链接]
发表于 2018-11-5 20:30:09 | 显示全部楼层 |阅读模式

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

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

x
函数功能是给定一个数组如[2,1,4,5,7]和一个目标值target,如9,要求返回[2,3](数组元素4+5=9)
我用了两种方式,但是为什么第一种定义数组返回时会报错:load of null pointer of type 'const int'
最佳答案
2018-11-5 21:12:34
第一份代码中,函数内部定义的数组变量,是一个局部变量,函数调用结束的时候,会被抛弃,对应的地址空间会被回收掉,虽然我们通过返回值,得到了一个指向原本数组地址的指针,但是该地址对应的内容已经失去了。
第二份代码中,通过new运算符创建的数组,为它分配的地址空间,不会在函数结束的时候释放掉,而是当进行delete操作的时候,它才会被释放掉。
所以第二份代码能正常运行

第一种

第一种

第二种

第二种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-5 21:12:34 | 显示全部楼层    本楼为最佳答案   
第一份代码中,函数内部定义的数组变量,是一个局部变量,函数调用结束的时候,会被抛弃,对应的地址空间会被回收掉,虽然我们通过返回值,得到了一个指向原本数组地址的指针,但是该地址对应的内容已经失去了。
第二份代码中,通过new运算符创建的数组,为它分配的地址空间,不会在函数结束的时候释放掉,而是当进行delete操作的时候,它才会被释放掉。
所以第二份代码能正常运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-5 22:59:51 | 显示全部楼层
首先你创建的是一个指针函数 int * two(),所以时间在在物理存储上应该是没有实际位置,额然后你有创建了一个具有实际地址的 int a[2],这会就会出现,计算机不知道将a[2]怎么使用然后放在那儿?
再看第二种还是一样指针函数 int * two(),但是这回你创建的 int *p = (int*)malloca(2*sizeof(int)) 就是跟函数相当于一个性质,都是没有实际物理存储地址的数组,所以当我函数被消灭掉的时候,数组也会跟着函数变化,而第一种则是,函数如果被释放掉了,我数组还在,这样就会报错!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-28 22:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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