#include "stdio.h"
#include "stdlib.h"
int main()
{
int num = 10, i, max, min, sum, *pscor;
float average;
printf("输入第一组学生的人数:\n");
while (scanf("%d", &num) != EOF) {
pscor = (int *) malloc(num * sizeof(int));
if (pscor == NULL) {
printf("申请失败\n");
exit(0);
}
printf("输入这组学生的成绩:\n");
for (i = 0; i < num; i++)
{
scanf("%d", pscor + i);
max = pscor[0];
min = pscor[0];
sum = pscor[0];
for (i = 1; i < num; i++)
{
if (pscor[i] > max)
max = pscor[i];
if (pscor[i] < min)
min = pscor[i];
sum += pscor[i];
}
average = (float) sum / num;
printf("--------------------------\n");
printf("最高分:%-5d", max);
printf("最低分:%-5d", min);
printf("平均分:%.1f\n", average);
free(pscor);
printf("继续输入下一组人数:");
}
return 0;
}
}
为什么运行不了,系统显示警告:局部变量 'pscor' 可能指向已取消分配的内存,怎么搞啊这
关于#c##的问题:系统显示警告:局部变量 'pscor' 可能指向已取消分配的内存
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 【以下回答由 GPT 生成】
这段代码运行不了的原因是在循环内部每次都重新分配了内存给指针
pscor
,但是在每次分配内存之前没有释放之前申请的内存。这导致在循环下一次开始时,内存空间没有被释放,然后又重新分配了一块新的内存,这样就造成了内存泄漏。而且在释放内存之后又继续使用了pscor
指针,这样就会导致指针悬挂的问题。解决这个问题的方法是在每次重新分配内存之前先释放之前的内存。同时,需要将循环计数器
i
的声明放在内层循环之前,防止变量覆盖。以下是修改后的代码:
#include "stdio.h" #include "stdlib.h" int main() { int num = 10, i, max, min, sum, *pscor; float average; printf("输入第一组学生的人数:\n"); while (scanf("%d", &num) != EOF) { if (pscor != NULL) { free(pscor); } pscor = (int *) malloc(num * sizeof(int)); if (pscor == NULL) { printf("申请失败\n"); exit(0); } printf("输入这组学生的成绩:\n"); for (i = 0; i < num; i++) { scanf("%d", pscor + i); } max = pscor[0]; min = pscor[0]; sum = pscor[0]; for (i = 1; i < num; i++) { if (pscor[i] > max) max = pscor[i]; if (pscor[i] < min) min = pscor[i]; sum += pscor[i]; } average = (float) sum / num; printf("--------------------------\n"); printf("最高分:%d", max); printf("最低分:%d", min); printf("平均分:%.1f\n", average); printf("继续输入下一组人数:"); } free(pscor); return 0; }
这个修改后的代码会在每次循环前释放之前申请的内存,并将内循环的计数器
i
的声明放在循环内部,修复了项问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 谁刷目标页面的uv记录器上数据,数据只记录跳转的数值
- ¥30 数据库软件的安装方法
- ¥15 一道以太网数据传输题
- ¥15 python 下载群辉文件
- ¥50 代码还没怎么运行但是需要代码功能调用数据
- ¥15 vue请求不到数据,返回状态200,数据为html
- ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
- ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
- ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
- ¥15 一部手机能否同时用不同的app进入不同的直播间?