【发布时间】:2017-01-22 11:02:05
【问题描述】:
我的程序 (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...
谁能帮帮我,我不知道我做错了什么。
【问题讨论】:
-
strcpy(&lid.leeftijd, "18");->lid.leeftijd = 18。不要忽略编译器警告。 -
永远不要使用与左侧赋值相同的指针变量给
realloc调用。 -
@MichaelWalz 这并不能解决问题。
-
@NoëlVissers 还有其他问题,例如
addLid(ledenArray, lid, &nLeden);->addLid(&ledenArray, lid, &nLeden); -
另外:不要强制转换 calloc 和 realloc 的返回值。