我有一个c语言的算法,在这个算法中,内存被多次使用malloc分配。我想写一个函数,当程序完成时释放内存,但我不确定如何构造它。会不会只是多次呼叫free()?我对C语言和内存分配还比较陌生,所以非常感谢您的帮助。
程序:

typedef struct State State;
typedef struct Suffix Suffix;

struct State {  /* prefix + suffix list */
    char*   pref[NPREF];    /* prefix words */
    Suffix* suf;            /* list of suffixes */
    State*  next;           /* next in hash table */
};

struct Suffix { /* list of suffixes */
    char *  word;           /* suffix */
    Suffix* next;           /* next in list of suffixes */
};

最佳答案

malloc的每个调用都应该使用free返回的指针值对malloc进行相应的调用。
您需要使用某种容器(如数组、链接列表)将malloc返回的值存储在程序中,并在从free返回之前对这些值调用main
按照以下行编写函数:

void freeMemory()
{
   int i = 0;
   State* sp = NULL;
   State* tmp = NULL;

   for ( i = 0; i < NHASH; ++i )
   {
      sp = statetab[i];
      while ( sp != NULL )
      {
         tmp = sp->next;
         free(sp);
         sp = tmp;
      }
   }
}

main语句之前从return调用它。

关于c - C内存分配问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30160318/

10-10 18:53