You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中malloc分配的数组在新函数打印报错求助

问题分析与解决

警告原因

你看到的警告是因为printf的%d格式符要求传入**int类型的参数,但你传入的roll_dice_outcome是int*类型(整数指针)**,两者类型不匹配。roll_dice_outcome是你用malloc分配的数组的首地址,不是具体的整数值。

解决方法

根据你的需求,分三种情况处理:

1. 打印数组中的单个元素

如果你想打印数组里的某一个元素(比如第一个元素),需要通过下标或者解引用指针获取具体值:

// 下标方式(可读性更高,推荐使用)
printf("1-ere %d -- \n", roll_dice_outcome[0]);
// 或者解引用指针的方式
printf("1-ere %d -- \n", *roll_dice_outcome);

2. 打印整个数组的所有元素

如果要打印数组全部内容,需要把数组长度N也传递给play_yatzy函数,再循环遍历:

// 修改play_yatzy的参数,增加数组长度N
void play_yatzy(int i, int *roll_dice_outcome, int N){
    switch (i)
    {
    case 1:
        printf("1-ere: ");
        for (int j = 0; j < N; j++) {
            printf("%d ", roll_dice_outcome[j]);
        }
        printf("-- \n");
        break;
    }
}

调用时传入N即可,比如主函数中:

int N = 5;
int *result = roll_multiple_dice(N);
play_yatzy(1, result, N);

3. 打印数组的内存地址

如果你的目的是打印数组的首地址,需要改用%p格式符,并将指针转为void*类型:

printf("1-ere %p -- \n", (void*)roll_dice_outcome);

额外提醒

使用完动态分配的数组后,记得调用free释放内存,避免内存泄漏:

free(result); // 释放roll_multiple_dice返回的指针

内容的提问来源于stack exchange,提问作者Wolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:01:00