试题 6:void GetMemory( char **p, int num ){ *p = (char *) malloc( num );}void Test( void ){ char *str = NULL; GetMemory( &str, 100 ); strcpy( str, "hello" ); printf( str ); free(str); str=NULL;}答:malloc 后,应推断 *p 是否 NULL标准的 new 运算符在分配失败时,抛出一个 bad_alloc 类型的异常
在任何情况下,校验标准形式 new 运算符返回结果都不能起到检测错误的功效
void test(void) { char str = (char ) malloc(100) strcpy(str, "hello"); free(str); if(str
= null) { strcpy(str “world”);//野指针 printf(str) } } 请问运行 test 函数会有什么样的结果
篡改动态内存区的内容,后果难以预料,非常危险
因为 free(str) 之后,str 成为野指针, if(str
= null)语句不起作用
假如数组做函数形参,那么就蜕变为普通指针(不是指针常量),而且失去了常量性,可以被修改void test(char str[100]) { str++;}试题 7:编写类 String 的构造函数、析构函数和赋值函数答:class String { public: String(const char *str = NULL); String(const String &other); ~String(); String & operator= (const String &other); private: char *m_data;