2016-11-29 83 views
0

我的c应用程序有几个函数存在内存泄漏问题。但是我不会调用这些函数(包含内存泄漏问题),而是为特定任务调用其他函数。我仍然有使用这个应用程序内存泄漏的风险?关于内存泄漏

+1

你为什么不排除这些功能从汇编?无论如何,温和的编译器会这样做,但最好可以肯定,因为它们是已知的死代码。 –

+7

如果你不直接或间接地调用函数,那么它将不会运行,也不会发生。 –

+0

不,但如果代码没有被调用,为什么不ifdef呢? – George

回答

2

假设你有这样的一段代码,

#include <stdio.h> 
#include <stdlib.h> 
int allocate_mem() 
{ 
    char *a = malloc(sizeof(char) * 256); 
} 

int helloworld() 
{ 
    printf("Hello World!"); 
} 

int main() 
{ 
    helloworld(); 
    return 0; 
} 

在上面的,我们不叫被分配内存的功能,所以在程序没有内存泄漏的功能allocate_mem( )永远不会被调用。

更新

一些措施,以避免内存泄漏:

(1)

#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 

#define KB (1024) 

char *alloc_mem() 
{ 
    char *mem = (char *)malloc(sizeof(char) * 1 * KB >>2); 
    return mem; 
} 

int main() 
{ 
    char *pmem = NULL; 

    if(NULL == (pmem = alloc_mem())) 
    { 
     printf("err, failed when alloc_mem().\n"); 
     return -1; 
    } 

    sprintf(pmem, "hello, world!\n"); 
    printf("%s", pmem); 

    if(NULL != pmem) 
     free(pmem); 

    return 0; 
} 

(2)

int alloc_mem(char *pmem, long mem_sz) 
{ 
    if(NULL == (pmem = (char *)malloc(sizeof(char) * mem_sz))) 
    { 
     printf("err, failed when malloc(), %s %s[%d].\n", __FILE__, __FUNCTION__, __LINE__); 
     return -1; 
    } 

    return 0; 
} 
+0

调用'free(NULL);'总是安全的,因此特定的'if'只是噪声。 – unwind