[英]C memory leaks in program
我需要關於我在程序中的哪個位置沒有釋放分配的 memory 的建議。 在我看來,它在評論部分的某個地方,以這種形式是為了編譯我。
在這里,以某種方式,我使用 memory 並嘗試釋放它。
free(diagonaly);
在 if(nr<=0 ) 中給我一個錯誤。
此條件在對角diagonaly = (char**) malloc(sizeof(*diagonaly)*rDiagonaly)
被分配的那一刻得到滿足,但沒有分配線。
int main (void)
{
char **diagonaly;
char **docasne;
int rDiagonaly = 10;
int cDiagonaly = -1;
char *str = NULL;
size_t capacity = 0;
int first = 1;
int nr = 0;
printf("Vypln:\n");
while ( getline (&str, &capacity, stdin) != -1)
{
if(str[0] == '\n')
break;
//valid control
if ( !validni(str, cDiagonaly) )
{
printf("Nespravny vstup.\n");
for (int i = 0; i < nr; i++)
free (diagonaly[i]);
free(diagonaly);
free(str);
return 0;
}
if (first)
{
cDiagonaly = strlen (str)+1;
diagonaly = (char**) malloc(sizeof(*diagonaly)*rDiagonaly);
first = 0;
}
if (nr==rDiagonaly)
{
rDiagonaly *= 2;
docasne = (char**)realloc (diagonaly, rDiagonaly*sizeof(*diagonaly));
diagonaly=docasne;
}
diagonaly[nr]=(char*) malloc (cDiagonaly*sizeof(**diagonaly));
strcpy(diagonaly[nr],str);
nr++;
}
if(nr<=0 )
{
printf("Nespravny vstup.\n");
free(str);
//free (diagonaly[0]);
//free(diagonaly);
return 0;
return 0;
}
rDiagonaly = nr;
char **maska;
int rMaska = nr+1;
int cMaska = cDiagonaly+1;
str = NULL;
capacity = 0;
nr=0;
maska=(char**)malloc (rMaska*sizeof(*maska));
for (int i = 0; i < rMaska; i++)
maska[i]=(char *) malloc (cMaska*sizeof(**maska));
printf("Maska:\n");
while ( getline (&str, &capacity, stdin) != -1)
{
if(nr == rMaska)
{
printf("Nespravny vstup.\n");
for (int i = 0; i < rDiagonaly; i++)
free (diagonaly[i]);
free(diagonaly);
for (int i = 0; i < rMaska; i++)
free (maska[i]);
free(maska);
free(str);
return 0;
}
//valid control
if ( validniM(str, cMaska) )
{
strcpy(maska[nr],str);
}
else
{
printf("Nespravny vstup.\n");
for (int i = 0; i < rDiagonaly; i++)
free (diagonaly[i]);
free(diagonaly);
for (int i = 0; i < rMaska; i++)
free (maska[i]);
free(maska);
free(str);
return 0;
}
nr++;
}
if (nr != rMaska)
{
printf("Nespravny vstup.\n");
for (int i = 0; i < rDiagonaly; i++)
free (diagonaly[i]);
free(diagonaly);
for (int i = 0; i < rMaska; i++)
free (maska[i]);
free(maska);
free(str);
return 0;
}
for (int i = 0; i < rDiagonaly; i++)
free (diagonaly[i]);
free(diagonaly);
for (int i = 0; i < rMaska; i++)
free (maska[i]);
free(maska);
free(str);
}
我很確定這個答案永遠不會被閱讀,但無論如何......
問題是您沒有初始化diagonaly
。 因此,如果您提供一個空行作為第一行,它將指向 memory 中的一個隨機位置,並且free()
可能會使您的程序崩潰。
解決方案是記住初始化你的指針:
char **diagonaly = NULL;
當然,您不應該這樣做free(diagonaly[0])
,因為nr
是0
,這意味着diagonally
解除引用是錯誤的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.