为了账号安全,请及时绑定邮箱和手机立即绑定

c++内存注销和输入修改内存值问题

c++内存注销和输入修改内存值问题

C C++ C#
慕田峪6419932 2018-07-25 16:27:35
    num的地址什么时候才变,我中间有隔还几分钟分钟运行一次地址还是不变,ptr_int很听话一直在变。    还有报错的那句话,是C++没用这种用法吗,是没法输入修改指针类型内存值,还是没法输入修改new类型内存值?    注释语句的报错提示error: no match for 'operator>>' (operand types are 'std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}' and '<unresolved overloaded function type>')|    int num = 213;    int *ptr_int = new int;    //cin >> *ptr_int >>  endl ;这句话加上就报错    *ptr_int = 10;    cout << "num数值和地址:"<< num << '\t'<< &num << '\t'<< endl             << "ptr_int数值和地址:"<< *ptr_int<< '\t'<< ptr_int<< '\t'<< endl ;    delete ptr_int;    return 0;
查看完整描述

1 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

关于地址:

基本上编译之后,变量的地址就被确定了。所以不管运行几次 num 的地址也不会改变。

而 ptr_int 所指的地址是每次运行时通过 new 申请出来的,所以其地址并不固定。


关于 cin 那句报错:

其实错误出在最后的 endl,你应该去掉它。 我在其他的问题中解释过这个,你可以参考下:http://www.imooc.com/wenda/detail/378300

查看完整回答
反对 回复 2018-07-25
  • 慕田峪6419932
    慕田峪6419932
    我刚试了,不管是重启软件还是重启电脑,num的地址一致没变 ,怎么才能释放这个地址,还是说这个地址一直背会占用。另外我用cmd命令:g++ -o main main.cpp 生成一个exe程序运行后一个占用了一个新地址,这个地址也不变,到底什么情况才能释放这种变量那?
  • onemoo
    onemoo
    你看,我说的是“编译之后,变量的地址就被确定了”,所以不管是重新运行程序,还是重启系统,你只要没有重新编译,num 的地址就不会改变。 后面你说的 g++ 命令就是重新编译程序,所以 num 地址才变化了。其实重新编译也不一定保证变量地址会改变,因为编译器完全有可能编译出和前次完全一样的程序。 你完全不需要主动“释放”这种普通变量啊! 普通变量的生存期开始于它被定义时,结束于至其作用域结束时。在生存期外,变量会被自动销毁,或者说是无效的。
  • 慕田峪6419932
    慕田峪6419932
    谢谢!看了你的回复,我问了一下同事,原来我对释放误会很多年。原来程序完成,释放后,只要没有别的程序去占用这段地址,那么他的预编译中的地址就不会变,即使重编译,num输出地址也不会变。new变量是放在堆区,由于堆区的特点所以会一直在变,这个我也不是很懂。感觉释放的意思和删除差不多,只是告诉系统这段地址你随便用,但是这段地址里的内容还在那,没有清空。之前我理解的释放像是格式化,把内存值全清零的那种。
点击展开后面2
  • 1 回答
  • 0 关注
  • 1453 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信