C中的内存泄漏

Mid*_*lue 2 c memory pointers

我是C初学者,我正在编写一个非常简单的链表.我想知道以下代码中是否存在内存泄漏:

void removeListEntry(struct tableEntry *symp, struct tableEntry *previous) {
  if (symp->next = 0){
    symbolList.tail = previous;
    previous->next =0;
  } else {
    previous->next = symp->next;
    symp->next = 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

我很确定如果指针symp没有存储在另一个变量中,则无法访问指针指向的列表条目,因此我将发生内存泄漏.在C中,我们使用malloc()函数为数据结构分配内存空间,我记得使用new关键字在C++中"动态"分配内存.使用malloc()和使用new分配内存有什么区别?我的代码中确实存在内存泄漏吗?

sth*_*sth 5

if (symp->next = 0) {
Run Code Online (Sandbox Code Playgroud)

这个if-"条件"是一个赋值,设置symp->next0.如果存储了指向另一个对象的指针symp->next,则该对象将丢失,并且不会释放对象内存.

对于比较,您需要使用==:

if (symp->next == 0) {
Run Code Online (Sandbox Code Playgroud)

或者没有明确的比较:

if (!symp->next) {
Run Code Online (Sandbox Code Playgroud)

else删除的情况下symp,从列表中(假设previous实际上之前包含元素symp),但你不要释放它的内存.这可能是内存泄漏,但它取决于调用函数的代码:该代码可能仍然可以释放symp或使用已删除的元素执行其他操作,或者它可能只是忘记它并泄漏它的内存.