|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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");//[color=Red]就是这输出了错误[/color]
- }
- 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分配机制的问题
|
|