看似简单的 C 代码似乎不允许我从链表中删除第一个元素。但是,我可以成功删除任何其他单个元素,并且可以成功删除整个链表。
typedef struct list{
int data;
struct list * next;
} list;
void remove_element(list * node, unsigned int index){
if (node == NULL)
exit(-1);
list *currElem = node;
if (index == 0) {
node = node->next;
currElem->next = NULL;
free(currElem);
return;
}
产生以下产品: "free((: 无效指针: 0xbfabb964">
我对所有其他操作函数都遵循了相同的格式,没有问题。论坛上的类似线程似乎没有处理这个特定问题。
您可以在 Push 函数上阅读此 pdf 中的解释,该函数对此进行了解释: http://cslibrary.stanford.edu/103/
这就是 c 在心理上变得时髦的地方。您本能地想要将指针标记为指针,事实确实如此。但它是指针值,而不是指针引用。这就像C神灵的圣灵。三人组。C 按值而不是地址/引用将参数传递给函数。那么,如何通过引用传递变量呢?请记住,解决方案是如此明显,一个星期对我来说真的没有意义,我向上帝发誓。