摘要:
内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中... 阅读全文
posted @ 2014-06-25 13:59
曦花
阅读(193)
评论(0)
推荐(0)
摘要:
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。常见的内存错误及其对策如下:1、 内存分配未成功,却使用了它。编程新手常犯这种... 阅读全文
posted @ 2014-06-25 13:56
曦花
阅读(420)
评论(0)
推荐(0)
摘要:
C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。 指针可以随时指向任意类型的内存块,它的特征是“可变... 阅读全文
posted @ 2014-06-25 13:20
曦花
阅读(394)
评论(0)
推荐(0)
摘要:
如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么?voidGetMemory(char*p,intnum){p=(char*)malloc(sizeof(... 阅读全文
posted @ 2014-06-25 13:16
曦花
阅读(284)
评论(0)
推荐(0)
摘要:
别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。用调试器跟踪示例7-5,发现指针p被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了“野指针”。如果此时不把p设置为NULL,会让人误以为p是个合法... 阅读全文
posted @ 2014-06-25 13:06
曦花
阅读(280)
评论(0)
推荐(0)
摘要:
函数体内的局部变量在函数结束时自动消亡。很多人误以为示例7-6是正确的。理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉!voidFunc(void){char*p=(char*)malloc(100);//动态内存会自动释放吗?}我们发现指针有一些“似是而非”的特征:(... 阅读全文
posted @ 2014-06-25 13:04
曦花
阅读(484)
评论(0)
推荐(0)