将东西放入我的数组时出错。 C

时间:2017-01-22 11:02:05

标签: c arrays struct realloc

我的程序(Eclipse Neon)在我运行程序时崩溃了。我找到了解决问题的方法,但我不知道如何解决问题。

首先我创建一个动态数组:

int nLeden = 0;
AtletiekLid *ledenArray = (AtletiekLid *)calloc(nLeden, sizeof(AtletiekLid));

使用此结构:

typedef struct {
    char naam[30];
    unsigned leeftijd;
} AtletiekLid;

之后我这样做:

AtletiekLid lid;

strcpy(&lid.naam, "Test");
strcpy(&lid.leeftijd, "18");
addLid(ledenArray, lid, nLeden); //Program stopped working (windows error) on this line.

addLid函数:

void addLid(AtletiekLid **ledenArray, AtletiekLid lid, int *nLeden) {   
    *ledenArray = (AtletiekLid *)realloc(*ledenArray, (*nLeden + 1) * sizeof(AtletiekLid));
    (*ledenArray)[*nLeden] = lid;
    (*nLeden)++;
}

addLid(我的程序崩溃的地方)中,它在此行崩溃了:

*ledenArray = (AtletiekLid *)realloc...

有人可以帮助我吗,我不知道自己做错了什么。

1 个答案:

答案 0 :(得分:1)

发布的代码片段中有3个错误:

  • strcpy(&lid.naam, "Test");应该读取strcpy(lid.naam, "Test");,因为lid.naam是一个数组,当传递给函数时会衰变为指向其第一个元素的指针。

  • strcpy(&lid.leeftijd, "18");不正确。 lid.leeftijdunsigned int,您应该写lid.leeftijd = 18;

  • addLid(ledenArray, lid, nLeden);也是不正确的,因为addLid期望指向指针的指针作为其第一个参数,指向元素数量的指针作为第三个参数,因此它可以在调用者和#39;范围。你应该写这个:addLid(&ledenArray, lid, &nLeden);

请注意,您应该编译程序并启用更多警告,以便编译器发出有关此类类型不匹配的有用诊断信息。