数据结构栈满,追加空间的问题!
发布网友
发布时间:2024-09-30 05:14
我来回答
共1个回答
热心网友
时间:2024-11-13 02:19
这里不能用malloc函数追加数组空间。因为malloc函数是这样的:
malloc操作系统申请空余内存的“堆”存储空间,然后把申请到的首地址返回。
若栈已满,执行到这条语句
S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
则S.base指向新申请到的内存地址,原base地址丢失。
也就是说,你通过malloc函数申请的空间是操作系统分配的,不能通过指定起始地址来分配。
应该用realloc函数,此函数原型:
void *realloc(void *mem_address, unsigned int newsize);
语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
注意:新的大小一定要大于原来的大小不然的话会导致数据丢失!
此函数功能:先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。追问请问你在哪里看到的我用malloc来追加空间了,看都没看。