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)<<" ";
#include <string>
string data;//不用擔心溢位了,不過感覺有點變味了
q->data.push_back(c);//因為這裡用了pushback,所以感覺能實現功能但是怪怪的
q->rear++;
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;
}