马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
用你的代码调了一下,发现问题不是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分配机制的问题
|