关于临时变量内存分配和动态内存分配
2014-02-19 15:51
190 查看
今天,同学问了一个程序上的问题,在函数A中动态分配了的内存,为什么在函数B中还会被动态分配,其值在B中进行queue声明的时候被改变了,毫无疑问,问题肯定出现在内存分配这一方面,刚开始怎么都没有想透这个问题,虽然容器在声明的时候会自动分配一定的预留内存,当时考虑到可能是两次动态分配的时候内存冲突,跟踪了半天,记录了大量的地址也没有找到冲突的地址,后来发现竟然是A中动态分配内存的地方用了临时变量取地址……
虽然浪费了不少时间在这个问题上,而且看上去还是很小的一个问题,但是却学到了不少:
1)临时变量申请的内存在其作用域内肯定是不变的,当出了作用域之后,如果没有重新申请临时变量,那么内存中的值依然为该临时变量的最终值,虽然也可以用在后面的处理当中,但是要冒着其值可能随时被修改的风险!!!!
2)临时变量和动态内存分配(new)分配的地址不在同一个内存块中,当发现一个链表的几个节点的内存地址明显不是同一个内存块的时候,需要警惕了,是不是自己在哪个地方用错了!!!
3)容器的声明会分配内存,同时会随意修改分配内存中的值。
4)如何获取容器中元素的地址,这个问题一直没有找到………………虽然调试可以得到……但是无法通过显示调用函数得到
虽然浪费了不少时间在这个问题上,而且看上去还是很小的一个问题,但是却学到了不少:
1)临时变量申请的内存在其作用域内肯定是不变的,当出了作用域之后,如果没有重新申请临时变量,那么内存中的值依然为该临时变量的最终值,虽然也可以用在后面的处理当中,但是要冒着其值可能随时被修改的风险!!!!
2)临时变量和动态内存分配(new)分配的地址不在同一个内存块中,当发现一个链表的几个节点的内存地址明显不是同一个内存块的时候,需要警惕了,是不是自己在哪个地方用错了!!!
3)容器的声明会分配内存,同时会随意修改分配内存中的值。
4)如何获取容器中元素的地址,这个问题一直没有找到………………虽然调试可以得到……但是无法通过显示调用函数得到
相关文章推荐
- C\C++编译器关于变量的内存分配顺序总结
- 关于构造函数析构函数以及成员变量内存分配顺序的一些问题
- 关于const变量何时分配内存的两个要点
- Golang 中关于变量内存分配部分
- 关于全局变量内存分配的顺序
- 关于创建子类对象的时候是否为父类的私有变量分配了内存
- C\C++编译器关于变量的内存分配顺序总结
- 关于Java变量的声明、内存分配及初始化详解
- 关于c语言变量的存储及内存的分配
- 临时变量在内存中的地址分配
- 关于c语言的变量存储及内存分配
- C\C++编译器关于变量的内存分配顺序总结
- 关于内存分配,静态区-栈区-堆区-全局区
- [ Java学习 ] Java变量以及内存分配(非常重要)
- 今天遇到一个关于对象和对象方法内存分配的有趣的问题
- [java]String变量的内存分配问题
- 关于书上说的“编译的时候分配内存”
- 关于glibc中的内存分配管理
- 关于DLL工程中存在全局变量可能导致MFC内存泄露误报的原因分析及解决办法
- 关于const常量的内存分配问题