Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尝试将结构指针传递给函数时出现问题_C_Pointers_Struct - Fatal编程技术网

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”。谢谢!