读书人

两道改错题,该怎么解决

发布时间: 2012-03-26 15:46:56 作者: rapoo

两道改错题

C/C++ code
struct Test{    Test();    Test(int);    void fun(){};};void DoSomething(){    Test a(1);    Test b;    a.fun();    b.fun();}

C/C++ code
void DoSomething(){    .....    char *p;    p = malloc(1024);    if (NULL == p)        return;    .....    p = realloc(p,2048);    if (NULL == p)        return;    .....}


[解决办法]
C/C++ code
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();}
[解决办法]
//编译下..
C/C++ code
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;}
[解决办法]
C/C++ code
// 第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    .....}
[解决办法]
探讨

C/C++ code

// 第2个严格意义来说不是语法错误,而是可能会导致内存泄露
void DoSomething()
{
.....
char *p;
p = malloc(1024);
if (NULL == p)
return;
.....
p = realloc(p,2048); // 若realloc调用失败,则上面……

[解决办法]
C/C++ code
void DoSomething(){    .....    char *p;    p = malloc(1024);    if (NULL == p)        return;    .....    p = realloc(p,2048);    if (NULL == p)        return;    .....} 

读书人网 >C语言

热点推荐