今天,同学问了一个程序上的问题,在函数A中动态分配了的内存,为什么在函数B中还会被动态分配,其值在B中进行queue声明的时候被改变了,毫无疑问,问题肯定出现在内存分配这一方面,刚开始怎么都没有想透这个问题,虽然容器在声明的时候会自动分配一定的预留内存,当时考虑到可能是两次动态分配的时候内存冲突,跟踪了半天,记录了大量的地址也没有找到冲突的地址,后来发现竟然是A中动态分配内存的地方用了临时变量取地址……
虽然浪费了不少时间在这个问题上,而且看上去还是很小的一个问题,但是却学到了不少:
1)临时变量申请的内存在其作用域内肯定是不变的,当出了作用域之后,如果没有重新申请临时变量,那么内存中的值依然为该临时变量的最终值,虽然也可以用在后面的处理当中,但是要冒着其值可能随时被修改的风险!!!!
2)临时变量和动态内存分配(new)分配的地址不在同一个内存块中,当发现一个链表的几个节点的内存地址明显不是同一个内存块的时候,需要警惕了,是不是自己在哪个地方用错了!!!
3)容器的声明会分配内存,同时会随意修改分配内存中的值。
4)如何获取容器中元素的地址,这个问题一直没有找到………………虽然调试可以得到……但是无法通过显示调用函数得到