3、main()的返回类型

  问:下面的代码能 编译通过吗?如果能,它有什么潜在的问题吗?

#include<stdio.h> 
 
void main(void) 

    char *ptr = (char*)malloc(10); 
 
    if(NULL == ptr) 
    { 
        printf(" Malloc failed "); 
        return; 
    } 
    else 
    { 
        // Do some processing 
        free(ptr); 
    } 
 
    return; 
}
 


  答:因为main()方法的返回类型,这段代码的错误在大多数编译器里会被当作警告。main()的返回类型应该是“int”而不是“void”。因为“int”返回类型会让程序返回状态值。这点非常重要,特别当程序是作为依赖于程序成功运行的脚本的一部分运行时。

  4、内存泄露

  问:下面的代码会导致内存泄漏吗?

#include<stdio.h> 
 
void main(void) 

    char *ptr = (char*)malloc(10); 
 
    if(NULL == ptr) 
    { 
        printf(" Malloc failed "); 
        return; 
    } 
    else 
    { 
        // Do some processing 
    } 
 
    return; 
}
 


  答:尽管上面的代码并没有释放分配给“ptr”的内存,但并不会在程序退出后导致内存泄漏。在程序结束后,所有这个程序分配的内存都会自动被处理掉。但如果上面的代码处于一个“while循环”中,那将会导致严重的内存泄漏问题!

  提示:如果你想知道更多关于内存泄漏的知识和内存泄漏检测工具,可以来看看我们在Valgrind上的文章。