两道改错题
struct Test{ Test(); Test(int); void fun(){};};void DoSomething(){ Test a(1); Test b; a.fun(); b.fun();}void DoSomething(){ ..... char *p; p = malloc(1024); if (NULL == p) return; ..... p = realloc(p,2048); if (NULL == p) return; .....}struct Test{ Test(); Test(int); void fun(){};};void DoSomething(){ Test a(1); // Test(int) 构造函数只有声明,没有定义,编译阶段会出错 Test b; // Test() 构造函数只有声明,没有定义,编译阶段会出错 a.fun(); b.fun();}// 修改如下:struct Test{ Test(){} // 修改1 Test(int){} // 修改2 void fun(){};};void DoSomething(){ Test a(1); Test b; a.fun(); b.fun();}
[解决办法]
//编译下..
void DoSomething(){ char *p; p = (char*)malloc(sizeof(char)*1024); if (NULL == p) return; ........ p = (char*)realloc(p,sizeof(char)*2048); if (NULL == p) return;}
[解决办法]
// 第2个严格意义来说不是语法错误,而是可能会导致内存泄露void DoSomething(){ ..... char *p; p = malloc(1024); if (NULL == p) return; ..... p = realloc(p,2048); // 若realloc调用失败,则上面分配的1024个字节会造成无法访问,即内存泄露 if (NULL == p) return; .....}// 修改如下void DoSomething(){ ..... char *p; p = malloc(1024); if (NULL == p) return; ..... char *old_p; // 1 old_p = p; // 2 p = realloc(p,2048); if (NULL == p){ // 3 free(old_p); // 4 return; } // 5 .....}
[解决办法]
void DoSomething(){ ..... char *p; p = malloc(1024); if (NULL == p) return; ..... p = realloc(p,2048); if (NULL == p) return; .....}