《程序设计》cs.u20119 动态分配的检查 new操作的结果是申请到的空间的地址 当系统空间用完时,new操作可能失败 令new操作失败时,返回空指针 程序设计-26
《程序设计》 cs.sjtu 2011.9 程序设计 - 26 动态分配的检查 ❖ new操作的结果是申请到的空间的地址 ❖ 当系统空间用完时,new操作可能失败 ❖ new操作失败时,返回空指针
《程序设计》cs.u20119 动态内存分配与回收 //动态分配检查 int maino tint*p; p new int: f(!p) I cout <<"allocation failure\n return 111 *p=20;cout<<*p冫 delete p; return 0 程序设计27
《程序设计》 cs.sjtu 2011.9 程序设计 - 27 动态内存分配与回收 //动态分配检查 int main() {int *p; p = new int; if(!p) { cout << "allocation failure\n"; return 1;} *p = 20; cout << *p; delete p; return 0; }
《程序设计》cs.u20119 assert宏 冷 assert()宏在标准头文件 cassert中 冷aser0有一个参数,表示断言为真的表 达式,预处理器产生测试该断言的代码。 如果断言不是真,则在发出一个错误消 息后程序会终止。 程序设计28
《程序设计》 cs.sjtu 2011.9 程序设计 - 28 assert宏 ❖ assert()宏在标准头文件cassert中 ❖ assert()有一个参数,表示断言为真的表 达式,预处理器产生测试该断言的代码。 如果断言不是真,则在发出一个错误消 息后程序会终止
include <iostream> 《程序设计》cs.u20119 #nc|ude< casser>∥包含 assert宏的头文件 using namespace std; int maino i int *p; p= new int: assert(p!=0);作p等于0,则退出程序 p=20; cout <<*p; delete p return 0: 程序设计29
《程序设计》 cs.sjtu 2011.9 程序设计 - 29 #include <iostream> #include <cassert> //包含assert宏的头文件 using namespace std; int main() { int *p; p = new int; assert (p != 0); //p等于0,则退出程序 *p=20; cout << *p; delete p; return 0; }
《程序设计》cs.u20119 内存分配的进一步介绍 静态分配:对全局变量和静态变量,编 译器为它们分配空间,这些空间在整个 程序运行期间都存在 Program 自动分配:函数内的局部变量空间是分 配在系统的栈工作区。当函数被调用时, Heap 动态分配空间被分配;当函数执行结束后,空间 被释放 Stack自动分配令动态分配:在程序执行过程中需要新的 存储空间时,可用动态分配的方法向系 Gobe静态分配统申请新的空间,当不再使用时用显式 variables 的方法还给系统。这部分空间是从被称 为堆的内存区域分配。 程序设计30
《程序设计》 cs.sjtu 2011.9 程序设计 - 30 内存分配的进一步介绍 ❖ 静态分配:对全局变量和静态变量,编 译器为它们分配空间,这些空间在整个 程序运行期间都存在 ❖ 自动分配:函数内的局部变量空间是分 配在系统的栈工作区。当函数被调用时, 空间被分配;当函数执行结束后,空间 被释放 ❖ 动态分配:在程序执行过程中需要新的 存储空间时,可用动态分配的方法向系 统申请新的空间,当不再使用时用显式 的方法还给系统。这部分空间是从被称 为堆的内存区域分配。 OS Program Heap 动态分配 Stack 自动分配 Globe variables 静态分配