我正在尝试修改函数中数组的元素。这在保留在main中时工作正常,但是当我将它移植到一个函数时,它在访问数组的第一个成员后会发生段错误。
下面的代码只是我实际代码的简化版本,以显示我遇到的段错误。
#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;
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:2)
votersPtr[i]->id
,与(*votersPtr[i]).id
相同,应为(*votersPtr)[i].id
。
答案 1 :(得分:0)
请记住,votersPtr
是指向数组指针的指针。
所以不应该是以下几行:
votersPtr[i]->id = (unsigned short) i;
取而代之的是:
(*votersPtr)[i].id = (unsigned short) i;
答案 2 :(得分:0)
类型voter **
模糊地指向指向voter
对象的指针数组的指针或指向指向{{1}数组的指针的指针对象。您的代码使用它作为第一个,但应该使用它作为第二个。变化
voter
到
votersPtr[i]->id = ...
一切都应该有效。