传入函数变量问题
问题
传入参数到函数体中做一些列改变,在函数体外面,该值无法改变。特别注意指针在这方面的使用。
解决办法
如需通过函数改变变量的值,那么就只有通过取该变量的地址传入函数,即可改变。
函数体里变量问题
问题
函数体里变量是存于栈中,每个程序的栈大小是有限的,所以在变量特别大的时候(比如数组长度特别长),运行会导致整个程序崩溃。
解决办法
可以通过申请空间来存储数组的大小。
双向循环链表问题
双向循环链表在插入的时候,要注意指针改变的先后顺序。
比如将temp_list_node插入到page_head的前面。
temp_list_node->prev = page_head->prev;
temp_list_node->next = page_head;
page_head->prev->next = temp_list_node;//要特别注意这一行与下一行的先后顺序,不然会导致插入失败
page_head->prev = temp_list_node;
单链表也可以实现先插先取
在实验最初的时候,为了实现先插先取,用了双向循环链表,双向链表更加麻烦,且更容易出错。
单链表要做到先插先取,可以使用两个指针,头指针和尾指针。
Struct node{
int a ;
struct node *next;
}
struct node *head;
struct node *tail;
insert(struct node *new_node)
{
tail->next = new_node;
tail = new_node;
tail->next = NULL;
}
get()
{
struct node *new_node;
return head->next;
}
内核软锁死问题
如图所示,加了互斥锁,但是没有释放锁,就会出现这种问题

解决方法
找到mutex_lock后面的所有函数出口,特别是有return的地方,一定要记得释放锁
本文详细探讨了在编程中遇到的几个常见问题,包括传入函数的变量不变、函数体内栈溢出、双向循环链表的插入以及内核软锁死。针对这些问题,提出了解决方案,如通过指针传递变量地址、动态分配内存、注意指针操作顺序以及确保正确解锁,以避免程序错误和崩溃。
8314

被折叠的 条评论
为什么被折叠?



