0
我的c應用程序有幾個函數存在內存泄漏問題。但是我不會調用這些函數(包含內存泄漏問題),而是爲特定任務調用其他函數。我仍然有使用這個應用程序內存泄漏的風險?關於內存泄漏
我的c應用程序有幾個函數存在內存泄漏問題。但是我不會調用這些函數(包含內存泄漏問題),而是爲特定任務調用其他函數。我仍然有使用這個應用程序內存泄漏的風險?關於內存泄漏
假設你有這樣的一段代碼,
#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;
}
調用'free(NULL);'總是安全的,因此特定的'if'只是噪聲。 – unwind
你爲什麼不排除這些功能從彙編?無論如何,溫和的編譯器會這樣做,但最好可以肯定,因爲它們是已知的死代碼。 –
如果你不直接或間接地調用函數,那麼它將不會運行,也不會發生。 –
不,但如果代碼沒有被調用,爲什麼不ifdef呢? – George