我是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分配内存有什么区别?我的代码中确实存在内存泄漏吗?
if (symp->next = 0) {
Run Code Online (Sandbox Code Playgroud)
这个if-"条件"是一个赋值,设置symp->next
为0
.如果存储了指向另一个对象的指针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
或使用已删除的元素执行其他操作,或者它可能只是忘记它并泄漏它的内存.
归档时间: |
|
查看次数: |
404 次 |
最近记录: |