Ссылаясь на «C - Помогите понять, как написать функцию внутри функции (list_map)» - PullRequest
1 голос
/ 23 января 2010

У меня тот же профессор: я прочитал форум:

Как написать функцию внутри функции (list_map)

Это очень полезно для пониманияконцепция функции, но я не уверен, правильно ли я ее использую ...

Вот мой код .. Дайте мне знать, если я на правильном пути ...

Предположим, что у меня есть массив из 10 связанных списков, в которых связанные списки содержат целые числа

Теперь я хотел бы отсортировать список, вызвав list_map ();function

Так что мой основной выглядит примерно так:

int x = 10;  
LLIST *mylist[x];  
bzero(mylist, 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);  
}

и сортировка:

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

Ошибка, которую я получаю, это ошибка сегментации, когда я ее запускаю.

Пожалуйста, извините за отсутствие кода, я знаю, что моя функция сортировки работает, я уже проверил ее и распечатывает каждый список.Если вам нужно увидеть что-то более подробно, дайте мне знать, я предоставлю это.

Ответы [ 2 ]

2 голосов
/ 23 января 2010

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);  
}
2 голосов
/ 23 января 2010

Вы распределяете мой список? Исходя из того, что у вас здесь есть, похоже, что все, что получило доступ к mylist, могло вызвать ошибку. Вы уверены, что должно быть LLIST *mylist[x];, а не LLIST mylist[x];?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...