运行程序时,我的程序(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...


有人可以帮我吗,我不知道我在做什么错。

最佳答案

发布的代码片段中存在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希望将指向指针的指针作为其第一个参数并将指向元素数量的指针作为第三个参数,因此它可以在调用者的作用域中更新它们。您应该改为这样写:addLid(&ledenArray, lid, &nLeden);


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

关于c - 将某些东西放入我的数组时出错。 C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41790083/

10-11 22:55