参考“C - 帮助理解如何在函数内编写函数(list_map)”

时间:2010-01-23 03:52:36

标签: c linked-list

我有同一位教授:我读过论坛:

How to write a function within a function (list_map)

理解函数的概念非常有用,但我不确定我是否正确使用它...

这是我的代码..如果我走在正确的轨道上,请告诉我......

假设我有一个包含10个链表的数组,链表中包含整数

现在我想对列表调用list_map()进行排序;功能

所以我的主要看起来像这样:

int x = 10;  
LLIST *mylist[x];  
bzero(mylist, sizeof(LLIST *)*x);  
.  
.    
for(i=0; i< 10; i++)  
{    
 //Segfalt   
 list_map(mylist[i],sort);   
}

我的list_map看起来像:

void list_map( LLIST *list, void (*f)(void *) )  
{  
  printf("Sort");  
  f(list);  
}

并排序:

void sort(LLIST *n) {  
//Sort Code  
}

我运行它时遇到的错误是Segmentation fault。

请原谅我缺乏代码,我知道我的排序功能有效,我已经测试了它并打印出每个列表。如果你需要更详细地看到一些东西,请告诉我,我会提供它。

2 个答案:

答案 0 :(得分:2)

你在分配mylist吗?基于你在这里所拥有的东西看起来像访问mylist的任何东西都会导致段错误。您确定应该是LLIST *mylist[x];而不是LLIST mylist[x];吗?

答案 1 :(得分:2)

bzero将内存归零并不分配内存,请使用malloc

int x = 10;  
LLIST **mylist;  
mylist = (LLIST**)malloc(sizeof(LLIST *)*x);  
.  
.    
for(i=0; i< 10; i++)  
{    
 //Segfalt   
 list_map(mylist[i],sort);   
}

void list_map( LLIST *list, void (*f)(void *) )  
{  
  printf("Sort");  
  f(list);  
}