注册 登录
编程论坛 C语言论坛

队列中分配内存的问题。

持剑的战士 发布于 2020-12-20 20:21, 1633 次点击

typedef int QElemType;
#define MAXQSIZE 100
typedef struct
{
    QElemType  *base;
    int  front;
    int  rear;
}SqQueue;
void  InitQueue(SqQueue  &Q)
{
    Q.base = (QElemType * )malloc(MAXQSIZE * sizeof(QElemType));
    if(!Q.base)  exit(-1);
    Q.front = Q.rear = 0;
}

typedef struct queue
{
    QElemType  base[MAXQSIZE];
    int front;
    int rear;
}SqQueue;
void InitQueue(SqQueue  &Q)
{
    Q = (SqQueuePtr)malloc(sizeof(SqQueue));
    if (!Q)
    {
        printf("存储分配失败!\n");
        exit(-1);
    }
    Q.front = Q.rear = 0;
}
正如我标红处:
第一个问题:在什么情况下要在sizeof(SqQueue)前乘上MAXQSIZE?
第二个问题:为什么①中是给Q.base分配内存,而②中是给Q分配内存,这两种有什么区别?
2 回复
#2
do8do8do82020-12-20 21:41
第一个问题:在什么情况下要在sizeof(SqQueue)前乘上MAXQSIZE?
这个先要了解malloc函数的用途:void *malloc(long Bytes):该函数分配了Bytes个字节,并返回了指向这块内存的指针。
而你的问题:在什么情况下要在sizeof(SqQueue)前乘上MAXQSIZE?.可以转换成:在sizeof(SqQueue)前乘上MAXQSIZE等于多少个字节
字节数够不够用? 这样你就明白了乘不乘在于你的程序需要多少字节,MAXQSIZE是一个字符常量,它可以替换100,500甚至无穷(遗憾c语言没有无穷)

#3
rjsp2020-12-21 08:49
你这代码,除了C和C++语法瞎鸡巴混用外,第二段代码的语法也错误得离奇,改都没法改,,处处矛盾。
1