首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个C函数有什么问题?

这个C函数有什么问题?
EN

Stack Overflow用户
提问于 2013-10-16 04:13:59
回答 1查看 97关注 0票数 0
代码语言:javascript
复制
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;
}

当我在另一个模块中调用此函数时,使用

代码语言:javascript
复制
 BAR_tppCarta *baralho = BAR_CriarBaralho();

窗口停止工作,就像调试错误一样。有谁能帮帮我吗?

非常感谢!Alessandro

EN

回答 1

Stack Overflow用户

发布于 2013-10-16 04:16:47

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

代码语言:javascript
复制
typedef struct Carta* BAR_tppCarta;

应该是:

代码语言:javascript
复制
typedef struct Carta BAR_tppCarta;

这两行代码:

代码语言:javascript
复制
            baralho[k]->naipe = i;
            baralho[k]->valor = j;

应该是:

代码语言:javascript
复制
            baralho[k].naipe = i;
            baralho[k].valor = j;

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

代码语言:javascript
复制
typedef struct Carta* BAR_tppCarta;

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

代码语言:javascript
复制
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++;
        }

尽管我建议不要这样做,因为它很复杂,除非你有很好的理由这样做。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19390191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档