C 尝试将结构指针传递给函数时出现问题
这个代码有什么问题C 尝试将结构指针传递给函数时出现问题,c,pointers,struct,C,Pointers,Struct,这个代码有什么问题 typedef struct jogador{ char nome[7]; int pecas[6][2]; }Jogador; void distribuir_pecas( Jogador* jogadores ); int main() { Jogador* jogadores; jogadores = (Jogador*) malloc( 4 * sizeof(Jogador)); distribuir_pecas( joga
typedef struct jogador{
char nome[7];
int pecas[6][2];
}Jogador;
void distribuir_pecas( Jogador* jogadores );
int main()
{
Jogador* jogadores;
jogadores = (Jogador*) malloc( 4 * sizeof(Jogador));
distribuir_pecas( jogadores );
return 0;
}
void distribuir_pecas( Jogador* jogadores ){
int domino[28][2];
int vetor_aux[28];
int i, j;
int peca_sorteada;
int num_jogador = 0;
int num_domino = 0;
srand(time(NULL));
for( i = 0; i < 28; i++){
vetor_aux[i] = 1;
}
for( i = 0 ; i < 7; i++){
for( j = 0; j < 7; j++){
if( j == 0 ){
j = i;
}
domino[num_domino][0] = i;
domino[num_domino][1] = j;
//printf("%d*%d\n", domino[num_domino][0], domino[num_domino][1]);
num_domino++;
}
}
while( num_jogador < 4 ){
for( i = 0; i < 6; ){
peca_sorteada = rand()%28;
if( vetor_aux[peca_sorteada] ){
vetor_aux[peca_sorteada] = 0;
jogadores[num_jogador].pecas[i][0] = domino[peca_sorteada][0];
jogadores[num_jogador].pecas[i][1] = domino[peca_sorteada][1];
i++;
printf("[%d|%d]\n",jogadores[num_jogador].pecas[i] [0],jogadores[num_jogador].pecas[i][1]);
}
}
printf("\n\n");
num_jogador++;
}
}
typedef结构jogador{
char-nome[7];
国际佩卡斯[6][2];
}乔加多;
空隙分布(慢跑者*慢跑者);
int main()
{
Jogador*Jogadors;
jogadores=(Jogador*)malloc(4*sizeof(Jogador));
分发佩卡斯(慢跑爱好者);
返回0;
}
空隙分布(慢跑者*慢跑者){
int domino[28][2];;
国际兽医协会[28];
int i,j;
国际山核桃;
int num_jogador=0;
int num_domino=0;
srand(时间(空));
对于(i=0;i<28;i++){
评审员(辅[i]=1;
}
对于(i=0;i<7;i++){
对于(j=0;j<7;j++){
如果(j==0){
j=i;
}
domino[num_domino][0]=i;
domino[num_domino][1]=j;
//printf(“%d*%d\n”,domino[num_domino][0],domino[num_domino][1]);
num_domino++;
}
}
而(数量小于4){
对于(i=0;i<6;){
山核桃=兰特()%28;
如果(审查员辅助[peca\U sorteada]){
兽医辅助[peca_Sorteda]=0;
jogadores[num_jogador].pecas[i][0]=domino[peca_sorteada][0];
jogadores[num_jogador].pecas[i][1]=domino[peca_sorteada][1];
i++;
printf(“[%d |%d]\n”,jogadores[num_jogador].pecas[i][0],jogadores[num_jogador].pecas[i][1]);
}
}
printf(“\n\n”);
num_jogador++;
}
}
例如,当我尝试将
domino[peca_sorteda][0]
等同于jogadores[num_jogador].pecas[I][0]
操作数时,使用->
操作数会导致编译错误ocurrs,但使用
操作数时,printf不会打印正确的值。为什么 不确定这是否是根本问题,但:
int domino[28][2];
....
for( i = 0 ; i < 7; i++){
for( j = 0; j < 7; j++){
if( j == 0 ){
j = i;
}
domino[num_domino][0] = i;
domino[num_domino][1] = j;
//printf("%d*%d\n", domino[num_domino][0], domino[num_domino][1]);
num_domino++;
}
}
int-domino[28][2];
....
对于(i=0;i<7;i++){
对于(j=0;j<7;j++){
如果(j==0){
j=i;
}
domino[num_domino][0]=i;
domino[num_domino][1]=j;
//printf(“%d*%d\n”,domino[num_domino][0],domino[num_domino][1]);
num_domino++;
}
}
会给你带来麻烦的<在这个双循环结束时,code>num_domino将是49个,但是
domino
数组只有28个元素长。请澄清您的问题。举一个不起作用的代码的例子,并给出它产生的输出。此外,请简化您的代码示例(我们真的需要查看所有这些循环和malloc等吗?)但您确实在循环中使用了它。您正在向超出其界限的domino
元素进行写入,这是真的。在打印“jogadores”的内容之前,我正在增加“I”。谢谢!