| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 621 人关注过本帖
标题:写了一个小程序,但会发生内存问题,看了好久,实在是找不出问题。。。
只看楼主 加入收藏
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
结帖率:66.67%
收藏
 问题点数:0 回复次数:7 
写了一个小程序,但会发生内存问题,看了好久,实在是找不出问题。。。
程序代码:
#include <stdio.h>
#include <malloc.h>
struct Student
{
    int age;
    char name[70];
    float score;
};

void inputif(struct Student *pArr);
void sort(struct Student *pArr,int len);
void outputif(struct Student *pArr);

int main(void)
{
    struct Student student;
    inputif(&student);
    sort(&student,4);
    outputif(&student);
    getchar();
    return 0;
}

void inputif(struct Student *pArr)
{
    int i;
    pArr=(struct Student *)malloc(4*sizeof(struct Student));  //只需要类型所占的空间。
    printf("请输入学生的信息:\n");
    for(i=0;i<4;i++)
    {
        printf("请输入第%d个学生的信息:\n",i+1);
        printf("age=");
        scanf("%d",&pArr[i].age);
        printf("name=");
        scanf("%s",pArr[i].name);  //pArr[i].name是数组名,即为一个地址,不用加&。
        printf("score=");
        scanf("%f",&pArr[i].score);
        printf("\n\n");
        fflush(stdin);
    }
    printf("\n\n");
}

void sort(struct Student *pArr,int len)   //冒泡排序
{
    struct Student t;
    int i,j;
    for(i=0;i<len-1;i++)
    {
        for(j=0;j<len-1-i;j++)
        {
            if(pArr[j].score>pArr[j+1].score)
            {
                t=pArr[j];
                pArr[j]=pArr[j+1];
                pArr[j+1]=t;               //编译程序提示问题出现在这里,但是我看不出来啊
            }
        }
    }
}

void outputif(struct Student *pArr)
{
    int i;
    printf("按成绩升序排序后的学生信息为:\n");
    for(i=0;i<4;i++)
    {
        printf("第%d个学生的信息:\n",i+1);
        printf("age=%d",pArr[i].age);
        printf("name=%s",pArr[i].name);
        printf("score=%f",pArr[i].score);
        printf("\n\n");
    }
}
搜索更多相关主题的帖子: color 
2015-10-27 18:35
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
话说,我没看到你对t这个变量的定义。。

——我刚学加自学。。不可靠。就是忍不住发表下想法。

φ(゜▽゜*)♪
2015-10-27 18:45
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 楼主 任重道远
难道是因为  struct Student student 这个声明并不表示定义,没有分配存储空间?试下
2015-10-27 18:48
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 书生牛犊
定义了啊  struct Student t;   这不是么。。
2015-10-27 19:09
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 楼主 任重道远
哦,搞明白了,pArr是个指针变量,它指向的存储空间是动态分配的,所以传递的&student和下面分配的地址矛盾
2015-10-27 19:22
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 楼主 任重道远
改正后:
程序代码:
#include <stdio.h>
#include <malloc.h>
struct Student
{
    int age;
    char name[70];
    float score;
};
void inputif(struct Student **pArr);
void sort(struct Student **pArr,int len);
void outputif(struct Student **pArr);
int main(void)
{
    struct Student *pArr;
    inputif(pArr);
    sort(pArr,4);
    outputif(pArr);
    getchar();
    return 0;
}
void inputif(struct Student **pArr)
{
    int i;
    *pArr=(struct Student *)malloc(4*sizeof(struct Student));  //只需要类型所占的空间。
    printf("请输入学生的信息:\n");
    for(i=0;i<4;i++)
    {
        printf("请输入第%d个学生的信息:\n",i+1);
        printf("age=");
        scanf("%d",&(*pArr)[i].age);
        printf("name=");
        scanf("%s",(*pArr)[i].name);  //pArr[i].name是数组名,即为一个地址,不用加&。
        printf("score=");
        scanf("%f",&(*pArr)[i].score);
        printf("\n");
        fflush(stdin);
    }
    printf("\n\n");
}
void sort(struct Student **pArr,int len)
{
    struct Student t;
    int i,j;
    for(i=0;i<len-1;i++)
    {
        for(j=0;j<len-1-i;j++)
        {
            if((*pArr)[j].score>(*pArr)[j+1].score)
            {
                t=(*pArr)[j];       //成绩不一样时互换的是两个整体的位置,不换成绩。
                (*pArr)[j]=(*pArr)[j+1];
                (*pArr)[j+1]=t;
            }
        }
    }
}
void outputif(struct Student **pArr)
{
    int i;
    printf("按成绩升序排序后的学生信息为:\n");
    for(i=0;i<4;i++)
    {
        printf("第%d个学生的信息:\n",i+1);
        printf("age=%d",(*pArr)[i].age);
        printf("name=%s",(*pArr)[i].name);
        printf("score=%f",(*pArr)[i].score);
        printf("\n\n");
    }
}
2015-10-27 19:24
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
printf("第%d个学生的信息:\n",i+1);
编译时说这句有错误,你逗号用的是中文的。
2015-10-27 19:28
mj0011
Rank: 2
等 级:论坛游民
帖 子:24
专家分:39
注 册:2014-12-23
收藏
得分:0 
个人觉得sort函数可以用宏写比较好
2015-10-28 00:52
快速回复:写了一个小程序,但会发生内存问题,看了好久,实在是找不出问题。。。 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017323 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved