This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。
7年前关闭。
我有一个无法解决的记忆丢失问题:
通过以下功能生成:
============================
==========================
=====================
主要涉及的部分:
预先感谢您的回复。
7年前关闭。
我有一个无法解决的记忆丢失问题:
==19660== 14,583 (1,764 direct, 12,819 indirect) bytes in 49 blocks are definitely lost in loss record 27 of 27
==19660== at 0x4023F50: malloc (vg_replace_malloc.c:236)
==19660== by 0x80489F5: AllocateFct (function.c:27)
==19660== by 0x804BB51: InsertFct (reader.c:417)
==19660== by 0x804BFFB: InsertShape (reader.c:591)
==19660== by 0x804AEED: main (main.c:103)
通过以下功能生成:
function AllocateFct(char* model)
{
function fct = (function) malloc(sizeof(struct _function_));
if (fct == NULL)
return NULL;
if (model==NULL)
fct->model = NULL;
else
{
fct->model = malloc(sizeof(char) * (strlen(model) + 1));
fct->model[0] = '\0';
if (fct->model==NULL){
fprintf(stderr,"Not enough memory!\n");
exit(1);
}
strcpy(fct->model, model);
}
fct->detail = NULL;
fct->brief = NULL;
fct->bug = NULL;
fct->f = NULL;
fct->Parameter = NULL;
fct->ret = NULL;
fct->def = NULL;
fct->next = NULL;
return fct;
}
============================
void InsertFct(function* fct, content c)
{
if (type > 0)
{
type = c.code;
(*fct)->def = (char*) malloc(sizeof(char) * (strlen(c.message) + 1));
(*fct)->def[0]='\0';
if ((*fct)->def==NULL){
fprintf(stderr,"Not enough memory!\n");
exit(1);
}
strcpy((*fct)->def, c.message);
return;
}
switch (c.code)
{
case FN:
type = 0;
*fct = AllocateFct(c.message);
break;
case PARAM:
type = 0;
AddParameterFunction(*fct, c.message);
break;
case BRIEF:
type = 0;
AddBriefFunction(*fct, c.message);
break;
case DETAILS:
type = 0;
AddDetailFunction(*fct, c.message);
break;
case RETURN:
AddRetourFunction(*fct, c.message);
break;
case BUG:
type = 0;
AddBugFunction(*fct, c.message);
break;
default:
type = c.code;
AddDefautFunction(*fct,c.message);
break;
}
}
==========================
int InsertShape(list heading, list source, shape* finalShape, shape* tmp)
{
fileRead* file = NULL;
shape s = NULL;
shape insert = AllocateShape(NULL);
function fct = AllocateFct(NULL);
function fctlist = NULL;
int i = 0;
int j = 0;
int pile = 0;
int n = 0;
int tag = 0;
list headerlist = NULL;
content c;
char chaine;
if (heading != NULL )
{
char* recover = (char*) GetNameFile(heading->name);
s = AllocateShape(recover);
free(recover);
recover=NULL;
}
else if (source != NULL )
{
char* recover = (char*) GetNameFile(source->name);
s = AllocateShape(recover);
free(recover);
recover=NULL;
}
if (heading != NULL )
{
file = OpenFileRead(heading->name);
n = CheckInclude(file->f, &headerlist);
if (n == 0)
n = 1;
fseek(file->f, -n, SEEK_CUR);
do
{
i = 0;
j = RecoverComments(file, &c, &tag);
InsertFct(&fct, c);
if(c.message!=NULL){
free(c.message);
c.message=NULL;
}
if (type > 0)
AddToShape(insert, fct);
if (j == -5 && i == 0)
{
type = 0;
do
{
if (fscanf(file->f, "%c", &chaine) == EOF)
{
i = 0;
break;
}
} while (chaine == ' ' || chaine == '\n');
if (chaine == '/')
{
i = 1;
j = 0;
fseek(file->f, -1, SEEK_CUR);
}
}
if (i == 0 && (j == -5))
{
if (type == 0)
{
pile++;
fctlist = AddFunction(fctlist, fct);
}
else
type = 0;
}
} while (j != -3);
FreefileRead(file);
}
i = 0;
j = 0;
type = 0;
if (source != NULL )
{
file = OpenFileRead(source->name);
n = CheckInclude(file->f, &headerlist);
if (n == 0)
n = 1;
fseek(file->f, -n, SEEK_CUR);
do
{
i = 0;
j = RecoverComments(file, &c, &tag);
InsertFct(&fct, c);
if(c.message!=NULL){
free(c.message);
c.message=NULL;
}
if (type > 0)
AddToShape(insert, fct);
if (j == -5 && i == 0)
{
type = 0;
do
{
if (fscanf(file->f, "%c", &chaine) == EOF)
{
i = 0;
break;
}
} while (chaine == ' ' || chaine == '\n');
if (chaine == '/')
{
i = 1;
j = 0;
fseek(file->f, -1, SEEK_CUR);
}
}
if (i == 0 && (j == -5))
{
if (type == 0)
fctlist = TourAndChange(fctlist, fct);
else
type = 0;
}
} while (j != -3);
FreefileRead(file);
}
s->fctList = AddFunction(s->fctList, fctlist);
s->headerList = headerlist;
*finalShape = CreateListShape(*finalShape, s);
*tmp = CreateListShape(*tmp, insert);
return 1;
}
=====================
主要涉及的部分:
InsertShape(tmpheading, tmproot, &s, &s2);
if (heading == NULL){
tmpheading = NULL;
}
if (root == NULL){
tmproot = NULL;
}
}
预先感谢您的回复。
最佳答案
好吧,您什么时候可以释放它?看起来您的代码中没有一个免费的! (“freefileread”除外,但我们不知道该怎么做,而且似乎不是为该功能设计的!)