簡體   English   中英

使用malloc釋放c中分配的空間

[英]free the space allocated in c with malloc

我對此代碼有疑問:

typedef struct pop {
unsigned long int *np; // matrix
unsigned long int f;
long double fp; 
unsigned long int *R; // matrix
unsigned long int *C; // matrix
unsigned long int Dp;
unsigned long int Ds;
unsigned long int count;
struct popolazione *ptrTempLst; // pointer
struct popolazione *leftTree;  // left tree pointer
struct popolazione *rightTree; // right tree pointer
} Node; 

當我釋放為該結構分配的空間時,是否先釋放了指向結構內部矩陣的指針?

例如,

 Node *ptr=(Node *) malloc(sizeOf(Node));
 ptr->np=(unsigned long int *)malloc(10*sizeOf(unsigned long int));

 /*code code code*/

 // is necessary: free(ptr->np); 

 free(ptr);

提前致謝

是。

每個對malloc調用都必須有一個與free匹配的調用。

那是正確的。

為避免腳部受傷,您可以考慮以下做法:

  1. 始終使用free()釋放所有由malloc / calloc分配的內存
  2. 之后,將指針設置為NULL
  3. 使用專用的清除/銷毀功能以確保一致的內存清除

以下功能將是確保始終正確清理結構,避免內存泄漏以及避免意外釋放已釋放的內存並導致分段錯誤的好方法:

int destroyNode(Node* myNode) {
  if(!myNode) {
    printf("Invalid pointer! Exiting");
    return (-1);
  }

  // Clear out memory
  if(np) {
    free(np);
    np = NULL;
  }
  if(R) {
    free(R);
    R = NULL;
  }
  if(C) {
    free(C);
    C = NULL;
  }
  if(ptrTempLst) {
    free(ptrTempLst);
    ptrTempLst = NULL;
  }
  if(leftTree) {
    free(leftTree);
    leftTree = NULL;
  }
  if(rightTree) {
    free(rightTree);
    rightTree = NULL;
  }

  free(myNode);
}

例如:

int main(void) {
  Node *tempNode = calloc((size_t)1,sizeof(Node));

  // Alloc the member nodes, etc, do some code


  // Ready to clean up and exit program
  destroyNode(tempNode);
  tempNode = NULL;

  return 0;
}

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM