youhebuke52011 2015-09-27 04:19 采纳率: 0%
浏览 2001
已结题

c语言结构体问题 关于内存分配问题


#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>


#define MAX 100
#define LEN sizeof(struct book)


typedef struct book
{
    char id[20];
    char name[30];
    float price;
}Book;

typedef struct List
{
    Book *eBook;
    int length;
}SqList;




void InitView()
{
    printf("\n\n\t%c %c %c %c %c %c %c %c %c %c %c  图 书 管 理 系 统 %c %c %c %c %c %c %c %c %c %c %c\n",
            26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c\t\t1. 查询图书( Purchase control )\t\t      %c\n",25,25);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c\t\t2. 删除图书(  price look up   )\t\t      %c\n",25,25);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c\t\t3. 添加图书( Member management)\t\t      %c\n",25,25);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c\t\t4. 修改图书( Financial management)\t      %c\n",25,25);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c\t\t0. 退出系统( EXIT )\t\t\t      %c\n",25,25);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c\t\t\t\t\t\t\t      %c\n",25,25);
        printf("\t%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n",
            26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27);

}

void SearchBook()
{

}

void DeleteBook()
{

}

void AddBook()
{

}

void ReviseBook()
{

}

void InitList(SqList *L)
{
    L->eBook = (Book*)malloc(LEN*MAX);
    if(!L->eBook){
        printf("分配内存失败!\n");
        exit(0);
    }
}



void main()
{
    int n;
    SqList *L;
    InitList(L);

    while(1){

        InitView();
        printf("请选择你需要的功能的编号:");
        scanf("%d",&n);
        getchar();
        switch(n){
            case 1:SearchBook();break;
            case 2:DeleteBook();break;
            case 3:AddBook();break;
            case 4:ReviseBook();break;
            case 0:exit(0);break;
            default :printf("输入有误,请重新输入!\n");system("pause");system("cls");
        }
    }

}

为什么这样分配内存不行呢? 黑框弹出一回儿就说这程序已经停止工作了
其中LEN是sizeof(Book) ,MAX 为100

  • 写回答

6条回答 默认 最新

  • Robot-C 2015-09-27 04:23
    关注

    1、C中内存分为四个区
    栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。
    堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。
    全局区:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和释放的。......
    答案就在这里:C语言内存分配问题
    ----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器