【发布时间】:2011-02-01 21:36:56
【问题描述】:
我有一个将整数转换为字符串的函数。函数是
char * Int_String(int Number)
{
char* result;
NAT size = 1;
if (Number > 9) {
size = (NAT)log10((double) Number) + 1;
} else if (Number < 0) {
size = (NAT)log10((double) abs(Number)) + 2; /* including '-' */
}
size++; /* for '\0' */
result = (char *) memory_Malloc(sizeof(char) * size);
sprintf(result, "%d", Number);
return result;
}
NAT 是typedef unsigned int
Number 是 int
我以如下方式使用这个功能
char *s2;
char **Connections;
Connections = memory_Malloc(nc*sizeof(char*));
char con[]="c_";
k1=1;
for (i=0; i<nc ; i++){
s2 = Int_ToString(k1);
Connections[i]= string_Conc(con,s2);
string_StringFree(s2);
k1= k1+1;
}
而函数char* string_Conc(const char *s1, const char *S2)是
{
char* dst;
dst = memory_Malloc(strlen(s1) + strlen(s2) + 1);
strcpy(dst, s1);
return strcat(dst,s2);
}
我正在使用以下方法来释放它的内存:
for(i=0; i<nc; i++){
memory_Free(Connections[i],sizeof(char));
}
memory_Free(Connections,nc*sizeof(char*));
我遇到的问题是:当nc<=9 时,我可以释放所有分配的内存。但是当>=10 每增加一个字节时,内存就会以4 字节的倍数泄漏。我怎样才能解决这个问题。任何帮助将不胜感激。
编辑
void memory_Free(POINTER Freepointer, unsigned int Size)
谢谢, 特纳
【问题讨论】:
-
如何判断是否泄漏?
-
当我改变 nc 的数量时,它会相应地改变。如果 nc 是 10,那么 4 字节,如果 nc 是 11 ,那么 8 字节等等。
-
@thetna,但是你从哪里得到引用的字节数?
-
@thetna 您如何观察泄漏?瓦尔格林?顶?
-
同一个工具有一些内存检查功能,可以显示泄露的内存。很抱歉我之前忘记提及它,我也尝试使用 valgrind,它没有显示任何泄漏。内存泄漏观察的唯一区别是采用不同的 nc 值。
标签: c memory memory-leaks