将指向数组的指针传递给函数

时间:2015-11-24 21:17:50

标签: c pointers

我正在尝试修改函数中数组的元素。这在保留在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;
}

非常感谢任何帮助,谢谢。

3 个答案:

答案 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 = ...

一切都应该有效。