var myArray = ["Month,Expenditure,Income,Year", "January,187458,297664,1", "February,104967,274354,1", "March,202394,343509,1", "April,187532,94652,1", "May,138745,206456,1", "June,234857,143657,1", "July,193453,203433,1", "August,96343,45064,1", "September,371298,505635,1", "October,63756,85635,1", "November,45363,14355,1", "December,98642,173125,1"];
const select1 = document.querySelector('select[name=xaxis]');
const select2 = document.querySelector('select[name=yaxis]');
myArray[0].split(',').forEach(item => {
select1.appendChild(document.createElement('option')).textContent = item;
select2.appendChild(document.createElement('option')).textContent = item;
});
键已排序。 delete接受一个键然后删除它。它有效,但我不明白何时免费使用。
我们必须释放()我们从列表中取消链接的结构项
答案 0 :(得分:3)
你必须认为“malloc”和“free”与向某人借用东西一样。每当你从某人(malloc)借笔时,你需要稍后(免费)给它。
在您的情况下,您必须在确定没有任何内容可以访问它之后释放您的节点:
#include <stdio.h>
#include <stdlib.h>
struct item {
int key;
int data;
struct item *next;
};
struct item *head = NULL;
void delete(int key)
{
if(head == NULL) {
;
} else if(head->key == key) {
head = head->next;
} else {
struct item *curr = head;
struct item *prev = NULL;
int found = 0;
while(curr != NULL) {
if(curr->key == key) {
found = 1;
break;
} else if(curr->key > key) {
break;
}
prev = curr;
curr = curr->next;
}
if(found) {
prev->next = curr->next;
free(curr); // Here
}
}
}
它与借用机制完全相同:你不能在返回后使用任何东西(使用免费) - 否则会崩溃。
答案 1 :(得分:1)
更新指向下一个项目的指针后,您必须删除当前项目。因为当前项目将不再使用。为避免内存泄漏,您需要删除它。
if(found)
{
prev->next = curr->next;
free(curr)
}
答案 2 :(得分:1)
只要您不再访问该内存,就应该将free()
内存分配给指针。但你必须确保你实际上不需要它。例如,在您的代码中:
if(found) {
free(curr); // Here
prev->next = curr->next;
}
可能看起来会起作用,因为您已找到要删除的节点,但事实上,您仍然需要访问curr
指向的数据,以便更新prev->next
的值。所以你应该在这里释放它:
if(found) {
prev->next = curr->next;
free(curr); // Here
}
因为那时你真的不再需要访问curr
的内容了。