分类: 嵌入式
2016-02-28 20:08:49
在调试的时候,它总提示在InsertLink(pHead, 1, 1); 这个函数中出错的。好好思考这个问题。在InitLink()这个函数中,pHead是临时变量,是储存在栈中的,当执行完这个函数以后,pHead的值会被释放,但是通过malloc动态分配的内存它不会释放,但是如果pHead释放的话,我们就找不到这个动态分配的内存地址,这时候,main函数中的pHead仍为空,没有赋值,所以在下面的插入操作中将要出错。
但是如果我想把这个pHead的值直接存进main函数中声明的pHead变量中,这个怎么改呢?如果想直接修改main函数中的pHead变量,就需要把它的地址传过去,就是如下所示的:
void InitLink(PNODE pHead)
{
pHead = (PNODE)malloc(sizeof(NODE));
if (!pHead)
{
printf("Cannot malloc memory for pHead.\n");
exit(-1);
}
pHead->pNext = NULL;
}
然后在main函数中是这样的:
int main(int argc, char const *argv[])
{
PNODE pHead = NULL;
int val;
InitLink(&pHead);
InsertLink(pHead, 1, 1);
InsertLink(pHead, 1, 2);
。。。。。。
return 0;
}
这样在main函数中就不需要采用pHead = InitLink(pHead);的形式。
总结一下:
以这个InitLink()函数为例,比如在main函数中声明了一个PNODE pHead = NULL;变量,
(1)如果想要初始化这个变量,就需要对这个变量中的一些元素进行修改,所以需要传进去pHead变量的指针,在main函数中就需要这样的形式:InitLink(&pHead);
(2)如果不想给这个InitLink()函数传递指针,只是把这个PNODE 类型的pHead传进去,那么就需要在main函数中采取这样的形式:pHead = InitLink(pHead);
同时,需要在这个InitLink()函数中返回这个pHead的地址。