鱼C论坛

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

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

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

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

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

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

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

  4. #define WX 50
  5. #define WY 23

  6. void gotoxy(int x, int y);

  7. typedef struct coordinate{
  8. int x;
  9. int y;
  10. }coordinate,*Link;

  11. typedef struct snake{
  12. Link body;
  13. int length;
  14. struct snake *next;
  15. }snake, *Snake;

  16. //创建动态链表
  17. void createL(Snake head, int x, int y)
  18. {
  19.     Snake swap, newl;
  20.     swap = head;
  21.     while(swap->next != NULL)
  22.     {
  23.         swap = swap->next;
  24.     }

  25.     newl = (Snake) malloc(sizeof(snake));
  26.     if(newl == NULL )
  27.     {
  28.         printf("error\n");//[color=Red]就是这输出了错误[/color]
  29.     }
  30.     newl->body->x = x;
  31.     newl->body->y = y;
  32.     swap->next = newl;
  33.     newl->next = NULL;

  34. }
  35. void _snake()//初始化
  36. {
  37.     int i;
  38.     Snake head;
  39.     head =(Snake) malloc(sizeof(snake));
  40.     head->next = NULL;

  41.     for(i = 0; i < 3; i++)
  42.     {
  43.         createL(head, 4, 4+i);
  44.     }
  45.     for(i = 0; i < 3; i++)
  46.     {
  47.         printf("%d",head->body->x);
  48.         printf("%d",head->body->y);
  49.         head = head->next;
  50.     }
  51. }


  52. void gotoxy(int x, int y)//定义光标位置
  53. {
  54.     COORD wei;
  55.     wei.X = x;
  56.     wei.Y = y;
  57.     //Windows±à3ì
  58.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), wei);
  59. }
  60. void wall()
  61. {
  62.     int x,y;

  63.     for(x = 0; x <= WX; x++)
  64.     {
  65.         if(x == 0 || x == WX)
  66.         {
  67.             for(y =0 ;y <= WY; y++)
  68.             {
  69.                 gotoxy(x , y);
  70.                 printf("+");
  71.             }
  72.         }
  73.         gotoxy(x, 0);
  74.         printf("+");
  75.         gotoxy(x, WY);
  76.         printf("+");

  77.     }

  78. }
  79. int main()
  80. {
  81.     //wall();
  82.     _snake();
  83.     //draw_snake();
  84.     system("pause");
  85.     return 0;
  86. }
复制代码
最佳答案
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-3-28 22:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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