回覆列表
  • 1 # 使用者834195712159

    realloc()的作用是對之前用malloc()/calloc()分配的空間修改大小,而不是分配新空間,realloc()修改過的空間地址和之前的相同,除非之前的地址開始的連續空間不如修改後的空間大,中這種情況下,它會在其它地方分配一塊新大小的空間,並將原空間儲存的內容複製到新空間中,然後釋放原空間。

    簡單的說,就是這裡應該用malloc()分配新空間,而不是realloc()修改先前分配的空間。

    程式碼示例:

    #include <iostream>

    #include <memory.h>

    #include <stdlib.h>

    using namespace std;

    int size = 10;

    struct Queue

    {

    char *data;

    int front,rear ;

    };

    void initQueue(Queue *q)

    {

    q->front=q->rear=0;

    q->data=(char*)calloc(size,sizeof(char));

    }

    bool Isfull(Queue *q)

    {

    return q->rear==10;

    }

    char pop(Queue *q)

    {

    return q->data[q->front++];

    }

    void push(Queue *q,char c)

    {

    q->data[q->rear++]=c;

    if(q->rear>=size-1) //如果空間不夠,就用realloc重置data的空間大小

    {

    size=2*size;

    while(!(q->data=(char*)realloc(q->data,sizeof(char))))

    q->data=(char*)realloc(q->data,size*sizeof(char));

    }

    }

    int Isempty(Queue *q)

    {

    if(q->front==q->rear)

    return 1;

    return 0;

    }

    int main()

    {

    Queue q;

    initQueue(&q);

    for(char i="a";i<="z";i++)

    {

    push(&q,i);

    }

    while(!Isempty(&q))

    cout<<pop(&q)<<" ";

    return 0;

    }

    #include <iostream>

    #include <memory.h>

    #include <string>

    using namespace std;

    struct Queue

    {

    string data;//不用擔心溢位了,不過感覺有點變味了

    int front,rear ;

    };

    void initQueue(Queue *q)

    {

    q->front=q->rear=0;

    }

    char pop(Queue *q)

    {

    return q->data[q->front++];

    }

    void push(Queue *q,char c)

    {

    q->data.push_back(c);//因為這裡用了pushback,所以感覺能實現功能但是怪怪的

    q->rear++;

    }

    int Isempty(Queue *q)

    {

    if(q->front==q->rear)

    return 1;

    return 0;

    }

    int main()

    {

    Queue q;

    initQueue(&q);

    for(char i="a";i<="z";i++)

    {

    push(&q,i);

    }

    while(!Isempty(&q))

    cout<<pop(&q)<<" ";

    return 0;

    }

  • 中秋節和大豐收的關聯?
  • 皮皮蝦哪個季節吃最好?