2016-11-29 77 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