Я пытаюсь изменить элементы массива в функции. Это прекрасно работает, когда хранится в главном, но когда я переношу его в функцию, которую он segfaults после доступа к первому члену массива.Передача указателя на массив функции
Код ниже - это только уменьшенная версия моего фактического кода, чтобы показать, где я получаю segfault.
#include <stdio.h>
#include <stdlib.h>
typedef struct {
unsigned short id;
} voter;
void initialise(voter** votersPtr, unsigned short *numOfVoters) {
*votersPtr = malloc(sizeof(voter)*(*numOfVoters));
for(int i = 0; i < *numOfVoters; i++) {
votersPtr[i]->id = (unsigned short) i;
printf("%hu \n", votersPtr[i]->id);
}
}
int main(void) {
unsigned short numOfVoters = 480;
voter* voters = NULL;
initialise(&voters, &numOfVoters);
return EXIT_SUCCESS;
}
Любая помощь была бы принята с благодарностью, спасибо.
Один из способов избежать такого рода ошибок состоит в том, чтобы функция 'initialize' начиналась с' voter * ptr = malloc ... ', а затем в конце делала' * votersPtr = ptr; '. IMHO делает код более легким для чтения, а также означает, что если вам придется отменить функцию по какой-то причине частично путем построения результата, вы не получите вызывающего абонента, который видит частично построенный результат. –