鱼C论坛

 找回密码
 立即注册
查看: 2303|回复: 1

[已解决]malloc函数分配内存失败

[复制链接]
发表于 2017-3-14 23:19:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qwe1231069 于 2017-3-14 23:23 编辑

如题,一直分配失败这怎么解。程序应该没错吧
应该只需要关注createL 和_snake
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>

#define WX 50
#define WY 23

void gotoxy(int x, int y);

typedef struct coordinate{
int x;
int y;
}coordinate,*Link;

typedef struct snake{
Link body;
int length;
struct snake *next;
}snake, *Snake;

//创建动态链表
void createL(Snake head, int x, int y)
{
    Snake swap, newl;
    swap = head;
    while(swap->next != NULL)
    {
        swap = swap->next;
    }

    newl = (Snake) malloc(sizeof(snake));
    if(newl == NULL )
    {
        printf("error\n");//就是这输出了错误
    }
    newl->body->x = x;
    newl->body->y = y;
    swap->next = newl;
    newl->next = NULL;

}
void _snake()//初始化
{
    int i;
    Snake head;
    head =(Snake) malloc(sizeof(snake));
    head->next = NULL;

    for(i = 0; i < 3; i++)
    {
        createL(head, 4, 4+i);
    }
    for(i = 0; i < 3; i++)
    {
        printf("%d",head->body->x);
        printf("%d",head->body->y);
        head = head->next;
    }
}


void gotoxy(int x, int y)//定义光标位置
{
    COORD wei;
    wei.X = x;
    wei.Y = y;
    //Windows±à3ì
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), wei);
}
void wall()
{
    int x,y;

    for(x = 0; x <= WX; x++)
    {
        if(x == 0 || x == WX)
        {
            for(y =0 ;y <= WY; y++)
            {
                gotoxy(x , y);
                printf("+");
            }
        }
        gotoxy(x, 0);
        printf("+");
        gotoxy(x, WY);
        printf("+");

    }

}
int main()
{
    //wall();
    _snake();
    //draw_snake();
    system("pause");
    return 0;
}
最佳答案
2017-3-15 09:34:29
用你的代码调了一下,发现问题不是malloc分配内存问题,而是你结构体定义的问题
snake结构体中使用了Link body;这个结构体指针,而malloc分配内存时,不会为这个指针分配内存,当你使用这个结构体的值,因为内存中找不到该指针准确位置,导致其报错
head =(Snake) malloc(sizeof(snake));后边加上一句
head->body = (Link)malloc(sizeof(coordinate));就不会报错了,其他同理
觉得这样麻烦就把Link改成coordinate就可以了
当snake中是Link时候sizeof(snake)是12,当sanke中是coordinate的时候sizeof(snake)是16,这应该是malloc分配机制的问题

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-15 09:34:29 | 显示全部楼层    本楼为最佳答案   
用你的代码调了一下,发现问题不是malloc分配内存问题,而是你结构体定义的问题
snake结构体中使用了Link body;这个结构体指针,而malloc分配内存时,不会为这个指针分配内存,当你使用这个结构体的值,因为内存中找不到该指针准确位置,导致其报错
head =(Snake) malloc(sizeof(snake));后边加上一句
head->body = (Link)malloc(sizeof(coordinate));就不会报错了,其他同理
觉得这样麻烦就把Link改成coordinate就可以了
当snake中是Link时候sizeof(snake)是12,当sanke中是coordinate的时候sizeof(snake)是16,这应该是malloc分配机制的问题

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
qwe1231069 + 1 + 1 谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 00:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表