【发布时间】:2014-12-10 01:10:43
【问题描述】:
我正在尝试使用指针将二维数组传递给函数。该函数将初始化数组。
我得到一个分段错误:运行时 11
代码如下
typedef struct {
char name[100];
int runs;
int batstatus;
float overs;
int bruns;
int wickets;
}player;
player selectbowler(player *team) {
srand((unsigned) time(null));
int d = rand()%10;
if(team[d].overs < 4) {
player p = team[d];
return p;
}
else {
return selectbowler(team);
}
}
void updatebowlwickets(player *team[], player bowler) {
for (int i = 0; i < 10; i++)
{
//Segmentation fault was being generated over here.
if( strcmp(team[i]->name, bowler.name) == 0) {
team[i]->wickets += 1;
}
}
}
//made a call to the above method via
player teams[2][10];
//Code part goes here
player bowler = selectbowler(teams[0]);
updatebowlwickets((player **)teams[0], bowler);
很抱歉之前上传了错误的代码。
除了你能告诉我什么时候会出现分段错误吗:11,我已经知道如果我们尝试访问无效地址或当我们用完分配的内存空间时会产生分段错误操作系统的硬件。如果有任何其他原因,或者即使陈述的原因有误,请告诉我。
谢谢!
【问题讨论】:
-
这段代码是正确的。段错误的“真实代码”必须不同。请发布真实代码并确保您已测试与您发布的代码相同以确认发生了段错误。
-
感觉像是一道作业题。
-
请注意,您可以通过调用
initialize(&overs[0][0]);来避免这种类型的转换——并且应该尽可能避免这种类型的转换。 -
编译时包含所有警告和调试信息 (
gcc -Wall -g)。 使用调试器 (gdb)
标签: c arrays segmentation-fault argument-passing pass-by-reference