【发布时间】:2011-01-08 11:39:57
【问题描述】:
我有同一个教授:我看过论坛:
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
}
当我运行它时,我得到的错误是分段错误。
请原谅缺少代码,我知道我的排序功能有效,我已经对其进行了测试,它会打印出每个列表。如果您需要查看更详细的内容,请告诉我,我会提供。
【问题讨论】:
-
您可以使用调试器或 printfs 来缩小段错误的指令范围吗?这将很快导致对问题的理解
-
我尝试在调用之前在 for 循环中执行 printf,但它不打印。如果 print f 在循环之前,它将打印。
-
list_map函数中也不做printf
-
你能编辑你的问题并在你的代码中标记段错误指令吗?我很确定这是一个内存分配错误,但调试练习对你有好处:-)
-
请注意,'printf()'(通常)会缓冲其输出;您需要使用 'fflush(stdout)' 或 'fprintf(stderr, ...)' 来确保您的诊断打印正确完成。遗憾的是,我们还需要看看两条“点”线代表什么。
标签: c linked-list