标题:malloc函数申请内存失败、?
只看楼主
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
已结贴  问题点数:20 回复次数:8 
malloc函数申请内存失败、?
#include <stdio.h>
#include <stdlib.h>

typedef struct OLNode
{
    int row,col;
    int vaule;
    struct OLNode * right, * down;
}OLNode,*OLink;

typedef struct
{
    OLink * row_head,* col_head;
    int m,n,len;
}CrossList;

void CreateCrossList(CrossList *M)
{
    int m,n,t,k;
    int i,j,e;
    OLink p,q;
    printf("请输入行的个数m,列的个数n,数据元素的总个数t:\n");
    scanf("%d%d%d",&m,&n,&t);
    M->m=m;
    M->n=n;
    M->len=t;
    if(!(M->row_head=(OLink*)malloc((m+1)*sizeof(OLink))));
    {
        printf("申请行失败!\n");
        exit(0);
    }
    if(!(M->row_head=(OLink*)malloc((n+1)*sizeof(OLink))));
    {
        printf("申请列失败!\n");
        exit(0);
    }
    for(k=1;k<m+1;k++)
        M->row_head[k]=NULL;
    for(k=1;k<n+1;k++)
        M->col_head[k]=NULL;
    printf("请输入元素的行下标,列下标,值:\n");
    for(scanf("%d%d%d",&i,&j,&e);i!=0;scanf("%d%d%d",&i,&j,&e))
    {
        if(!(p=(OLNode*)malloc(sizeof(OLNode))));
        exit(0);
        p->row=i;
        p->col=j;
        p->vaule=e;
        if(M->row_head[i]==NULL)
            M->row_head[i]=p;
        else
        {
            q=M->row_head[i];
            while(q->right!=NULL&&q->right->col<j)
                q=q->right;
            p->right=q->right;
            q->right=p;
        }
        if(M->col_head[i]==NULL)
            M->col_head[j]=p;
        else
        {
            q=M->col_head[j];
            while(q->down!=NULL&&q->down->col<i)
                q=q->down;
            p->down=q->down;
            q->down=p;
        }
    }
}

int main()
{
    CrossList M;
    CreateCrossList(&M);
    return 0;
}

我感觉代码没有访问越界
搜索更多相关主题的帖子: malloc 申请 int down NULL 
2017-10-30 14:14
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:10 
sizeof(OLink):4
sizeof(OLNode):20
2017-10-30 14:21
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 2楼 grmmylbs
??什么意思?
2017-10-30 15:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
精简一下代码试试,只保留与malloc相关的代码。
2017-10-30 16:54
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 4楼 吹水佬
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *p;
    p=(int *)malloc(sizeof(int));
    if(!p)
    {
        printf("失败");
        exit(0);
    }
    return 0;
}
换一段代码没问题。
2017-10-30 19:10
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
试试先创建分配好所有数据存储所需空间,然后再输入数据。
2017-10-30 20:24
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 6楼 吹水佬
额, 我不知道怎么改,,您能帮我改一下吗?
2017-10-30 20:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用花脸在2017-10-30 20:35:07的发言:

额, 我不知道怎么改,,您能帮我改一下吗?

if(!(M->row_head=(OLink*)malloc((n+1)*sizeof(OLink))));
这句好象是针对列 col_head 的?


2017-10-30 20:50
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 8楼 吹水佬
是的。
2017-10-30 21:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481937-1-1.html




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

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