求助,在TC2.0中,编译链接都没有错,也能运行,但是数字输进去的时候求出来的最大值出错?大神求帮忙

嘎哈年糕条 2018-09-13 08:35:35
#include<stdio.h>
#define NULL 0
typedef struct{
int A;
}sqlist;
typedef int status;
void inistlist(sqlist *a,status n)
{
status i;
a=(sqlist*)malloc(n*sizeof(sqlist));
for(i=0;i<n;i++)
scanf("%d",a[i]);
}
status Max(sqlist *a,status n)
{
status max,i;
max=a[0].A;
for(i=1;i<n;i++)
if(max<a[i].A) max=a[i].A;
return max;
}
void destroylist(sqlist *a)
{
free(a);
a=NULL;
}
int main()
{
sqlist *m=NULL;
status n;
printf("Please input the n:");
scanf("%d",&n);
inistlist(m,n);
printf("max=%d\n",Max(m,n));
destroylist(m);
return 0;
}
...全文
186 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-09-14
  • 打赏
  • 举报
回复
#include<stdio.h>
#include <stdlib.h>

#define NULL (void *)0

typedef struct{
int A;
}sqlist;

typedef int status;

void inistlist(sqlist **a,status n)
{
status i;
*a = (sqlist*)malloc(n * sizeof(sqlist));
if (!(*a))
return;

for(i = 0;i<n;i++)
scanf("%d", &(*a)[i].A);
}

status Max(sqlist *a,status n)
{
status max,i;

max = a[0].A;
for(i = 1; i < n; i++)
if(max < a[i].A)
max = a[i].A;

return max;
}

void destroylist(sqlist *a)
{
free(a);
a = NULL;
}

int main()
{
sqlist *m=NULL;
status n;
printf("Please input the n:");
scanf("%d",&n);
inistlist(&m, n);
printf("max = %d\n",Max(m,n));
destroylist(m);

return 0;
}

参考一下吧

有2处的错误。
1. 需要传二重指针到inistlist中;
2. scanf第二个参数应该是地址
scanf("%d", &(*a)[i].A);

zangfong 2018-09-13
  • 打赏
  • 举报
回复
你的inistlist函数在调用时inistlist(m,n);传入的是m,但到了函数中,实际上是m的一份拷贝m',并且使得m'指向这些申请的空间,函数调用完毕,m'销毁了,内存空间也就泄漏了,而m还是NULL。修改如下,应该就符合你的要求了吧:
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
typedef struct
{
int A;
} sqlist;

typedef int status;

sqlist * inistlist(status n)
{
status i;
sqlist *a=(sqlist*)malloc(n*sizeof(sqlist));
for(i=0; i<n; i++)
scanf("%d",&a[i]);

return a;
}

status Max(sqlist *a,status n)
{
status max,i;
max=a[0].A;
for(i=1; i<n; i++)
if(max<a[i].A) max=a[i].A;
return max;
}

void destroylist(sqlist *a)
{
free(a);
a=NULL;
}

int main()
{
sqlist *m=NULL;
status n;
printf("Please input the n:");
scanf("%d",&n);
m = inistlist(n);
printf("max=%d\n",Max(m,n));
destroylist(m);
return 0;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧