这个C函数有什么问题?

时间:2013-10-15 20:13:59

标签: c

typedef struct Carta* BAR_tppCarta
BAR_tppCarta * BAR_CriarBaralho () 
{
    int i;
    int j;
    int k=0;
    BAR_tppCarta *baralho;
    baralho = (BAR_tppCarta *) malloc(NUM_CARTAS*sizeof(BAR_tppCarta));
    if(!baralho)
        return NULL;
    for(i=COPAS;i<=ESPADA;i++)
        for(j=AS;j<=KING;j++)
            {
                baralho[k]->naipe = i;
                baralho[k]->valor = j;
                k++;
            }
    return baralho;
}

当我在另一个模块中使用

调用此函数时
 BAR_tppCarta *baralho = BAR_CriarBaralho();

Windows停止工作,就像调试错误一样。 有人可以帮我吗?

非常感谢! 的Alessandro

1 个答案:

答案 0 :(得分:7)

BAR_tppCarta只是一个指针,所以你要返回的是一个未初始化的指针数组(你也在踩着内存)。我怀疑这一行:

typedef struct Carta* BAR_tppCarta;

应该是:

typedef struct Carta BAR_tppCarta;

这两行:

            baralho[k]->naipe = i;
            baralho[k]->valor = j;

应该是:

            baralho[k].naipe = i;
            baralho[k].valor = j;

或者,您可以将BAR_tppCarta的原始定义保留为

typedef struct Carta* BAR_tppCarta;

然后为每个实例分配内存:

for(i=COPAS;i<=ESPADA;i++)
    for(j=AS;j<=KING;j++)
        {
            baralho[k] = malloc(sizeof(struct Carta));
            baralho[k]->naipe = i;
            baralho[k]->valor = j;
            k++;
        }

虽然我会以复杂为由提出反对,除非你有充分的理由这样做。