| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2535 人关注过本帖
标题:malloc申请失败
只看楼主 加入收藏
Leo小马
Rank: 1
来 自:漳州平和
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-12-15
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:7 
malloc申请失败
CPP文件
#include <stdio.h>
#include "ProcessScheduling.h"
void main()
{
    PCBList FCFS_L;
    PCBList SJF_L;
    PCBNode p[M],q[M];
    int num;
    InitPCBList(FCFS_L);
    InitPCBList(SJF_L);
    printf("进程数:");
    scanf("%d",&num);
    Input(p,num);
   
    FCFS(FCFS_L,p,num);
    SJF(SJF_L,p,num);
    printf("下列为 FCFS 算法结果:\n");
    print(FCFS_L,num);
    printf("下列为 SJF 算法结果:\n");
    print(SJF_L,num);
   
}

头文件
#include <stdio.h>
#include <malloc.h>
#include <string.h>

#define M 50

typedef struct PCBNode
{
    char name[10];
    double ArriveTime;
    double ServiceTime;
    double StartTime;
    double EndTime;
    double TurnaroundTime;
    double TurnaroundTime_R;
    struct PCBNode *next;
}PCBNode;

typedef struct PCBList
{
    PCBNode *head,*tail;
    int length;
}PCBList;

/*
void InitPCBList(PCBList &L);
void FCFS(PCBList &l,PCBNode &process[],int num);
void SJF(PCBNode &process[]);
*/


void InitPCBList(PCBList &L)
{
    L.head=NULL;
    L.tail=NULL;
    L.length=0;
}

void Input(PCBNode p[],int num)
{
    int i=0;
    printf("输入进程名、到达时间、服务时间\n");
    for (i=0;i<num;i++)
    {
        scanf("%s%lf%lf",p[i].name,&p[i].ArriveTime,&p[i].ServiceTime);
    }
   
}

void FCFS(PCBList &l,PCBNode s[],int num)
{   
    int i;
    PCBNode *q,*qre,*p;
    q=(PCBNode *)malloc(sizeof(PCBNode));
    qre=(PCBNode *)malloc(sizeof(PCBNode));
    p=(PCBNode *)malloc(sizeof(PCBNode));

    for(i=0;i<num;i++)
    {
        q=l.head;
        qre=NULL;
        
        strcpy(p->name,s[i].name);
        p->ArriveTime=s[i].ArriveTime;
        p->ServiceTime=s[i].ServiceTime;

        while (q&&q->ArriveTime<p->ArriveTime)
        {
            qre=q;
            q=q->next;
        }
        if (!qre)
        {
            p->next=l.head;
            l.head=p;
        }
        else                     
        {
            p->next=q;
            qre->next=p;
        }            
        p++;
    }

    l.head->StartTime=l.head->ArriveTime;
    l.head->EndTime=l.head->StartTime+l.head->ServiceTime;
    l.head->TurnaroundTime=l.head->EndTime-l.head->ArriveTime;
    l.head->TurnaroundTime_R=l.head->TurnaroundTime/l.head->ServiceTime;
    q=l.head->next;
    qre=l.head;
    while(q)
    {
        q->StartTime=qre->EndTime;
        q->EndTime=q->StartTime+q->ServiceTime;
        q->TurnaroundTime=q->EndTime-q->ArriveTime;
        q->TurnaroundTime_R=q->TurnaroundTime/q->ServiceTime;
        qre=q;
        q=q->next;
    }
}

void SJF(PCBList &l,PCBNode s[],int num)
{
    int i,j=0;
    PCBNode *q1,*qre,*p2,*q;;
   
    q=(PCBNode *)malloc(sizeof(PCBNode));
    qre=(PCBNode *)malloc(sizeof(PCBNode));
    p2=(PCBNode *)malloc(sizeof(PCBNode));

    for (i=0;i<num;i++)
    {
        if (s[i].ArriveTime<s[j].ArriveTime)
        {
            j=i;
        }
    }

    for(i=0;i<num;i++)
    {
        q=l.head;
        qre=NULL;

        strcpy(p2->name,s[i].name);
        p2->ArriveTime=s[i].ArriveTime;
        p2->ServiceTime=s[i].ServiceTime;

        if (i==j)
        {
            p2->next=l.head;
            l.head=p2;
            p2++;
            continue;
        }

        while (q&&q->ArriveTime<p2->ArriveTime)
        {
            qre=q;
            q=q->next;
        }
        if (!qre)
        {
            p2->next=l.head;
            l.head=p2;
        }
        else                     
        {
            p2->next=q;
            qre->next=p2;
        }            
        p2++;
    }

    l.head->StartTime=l.head->ArriveTime;
    l.head->EndTime=l.head->StartTime+l.head->ServiceTime;
    l.head->TurnaroundTime=l.head->EndTime-l.head->ArriveTime;
    l.head->TurnaroundTime_R=l.head->TurnaroundTime/l.head->ServiceTime;
    q=l.head->next;
    qre=l.head;
    while(q)
    {
        q->StartTime=qre->EndTime;
        q->EndTime=q->StartTime+q->ServiceTime;
        q->TurnaroundTime=q->EndTime-q->ArriveTime;
        q->TurnaroundTime_R=q->TurnaroundTime/q->ServiceTime;
        qre=q;
        q=q->next;
    }
}

void print(PCBList &l,int m)
{
    PCBNode *q=l.head;
    int i;
    for(i=0;i<m;i++)
    {
        printf("进程名   到达时间   服务时间   开始执行时间   完成时间   周转时间   带权周转时间\n");
        printf(" %s       %5.2lf     %5.2lf       %5.2lf        %5.2lf     %5.2lf       %5.2lf\n",q->name,q->ArriveTime,q->ServiceTime,q->StartTime,q->EndTime,q->TurnaroundTime,q->TurnaroundTime_R);
        q=q->next;
    }
}
搜索更多相关主题的帖子: 申请 malloc 失败 
2010-04-14 20:56
Leo小马
Rank: 1
来 自:漳州平和
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-12-15
收藏
得分:0 
q=(PCBNode *)malloc(sizeof(PCBNode));
    qre=(PCBNode *)malloc(sizeof(PCBNode));
    p2=(PCBNode *)malloc(sizeof(PCBNode));
在执行SJF里的这个几条语句返回的指针都是OXCCCCCC的....这是我同学叫我帮忙修改的代码我一直不知道什么原因  希望大家多多帮忙谢谢了
2010-04-14 20:57
Leo小马
Rank: 1
来 自:漳州平和
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-12-15
收藏
得分:0 
没人愿意帮忙么
2010-04-16 13:05
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:2 
g++ 编译完全正确,运行良好....

D:\c_sources_bak\bbs>g++ fg.c
In file included from fg.c:2:
hh.h:181:3: warning: no newline at end of file

D:\c_sources_bak\bbs>a
进程数:1
输入进程名、到达时间、服务时间
1 2 3
下列为 FCFS 算法结果:
进程名   到达时间   服务时间   开始执行时间   完成时间   周转时间   带权周转时间

 1        2.00      3.00        2.00         5.00      3.00        1.00
下列为 SJF 算法结果:
进程名   到达时间   服务时间   开始执行时间   完成时间   周转时间   带权周转时间

 1        2.00      3.00        2.00         5.00      3.00        1.00

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-16 13:14
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:2 
回复 2楼 Leo小马
返回的不是空指针就说明申请内存成功了啊。

南国利剑
2010-04-16 13:19
Leo小马
Rank: 1
来 自:漳州平和
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-12-15
收藏
得分:0 
难道是BUG= - = VC VS 会出错
2010-04-17 21:17
b001lcp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2010-3-17
收藏
得分:2 
函数没有问题。
就是malloc的内存没有释放。
还有 q 和 qre 没有必要申请内存,后面有指针赋地址给它
2010-04-17 21:52
liuzhiping
Rank: 2
等 级:论坛游民
帖 子:19
专家分:31
注 册:2009-7-8
收藏
得分:2 
我也运行了一下,没什么问题。。。。
2010-04-21 11:48
快速回复:malloc申请失败
数据加载中...
 
   



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

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