2016-11-29 3 views
0

メモリリークの問題が発生するアプリケーションにはいくつかの機能があります。しかし、私はそれらの関数(メモリリークの問題を含む)を呼び出すのではなく、特定のタスクのために他の関数を呼び出す。このアプリケーションを使用してメモリリークの危険性はまだありますか?メモリリークについて

+1

あなたがこれらの機能を除外しないのはなぜコンパイルから?適度なコンパイラは、とにかくそれを行うでしょうが、デッドコードとして知られているので、確かに最善です。 –

+7

関数を(直接的または間接的に)呼び出さないと、関数は実行されず、関数は何も起こりません。 –

+0

いいえ、コードが呼び出されない場合は、なぜそれを定義しないのですか? – George

答えて

2

は、上記の(私たちはメモリを割り当てるれる関数を呼び出していないので、プログラムにはメモリリークが機能allocate_memようがないで

#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; 
} 

、あなたは、コードのこの部分を持っていると仮定します)は呼び出されません。

更新

メモリリークを回避するために何らかの対策:

(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

関連する問題