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
相关产品推荐
相关产品推荐

