realloc():下一个大小无效
我在论坛上读到了一些关于这些问题的帖子,但我还是不明白 我正在编写一个堆栈实现代码,我被困在堆栈满时必须重新分配内存并使数组比以前大一倍的部分 这是我的推送功能代码realloc():下一个大小无效,c,valgrind,realloc,C,Valgrind,Realloc,我在论坛上读到了一些关于这些问题的帖子,但我还是不明白 我正在编写一个堆栈实现代码,我被困在堆栈满时必须重新分配内存并使数组比以前大一倍的部分 这是我的推送功能代码 typedef struct stackImp *Stack; typedef int Item; struct stackImp{ Item * items; int top; int maxSize; void push (Stack stack, Item item){ assert(st
typedef struct stackImp *Stack;
typedef int Item;
struct stackImp{
Item * items;
int top;
int maxSize;
void push (Stack stack, Item item){
assert(stack != NULL);
Item *temp;
if (stack->top < stack->maxSize+1) {
stack->items[stack->top] = item;
stack->top++;
}
else {
temp = realloc(stack->items, 2*(stack->maxSize) * sizeof(Item));
assert (temp != NULL);
stack->items = temp;
stack->items[stack->top] = item;
stack->top++;
stack->maxSize = (stack->maxSize)*2;
}
}
typedef结构stackImp*堆栈;
typedef int项;
结构stackImp{
项目*项目;
int top;
int-maxSize;
无效推送(堆栈,项){
断言(堆栈!=NULL);
项目*温度;
如果(堆栈->顶部<堆栈->最大大小+1){
堆栈->项目[堆栈->顶部]=项目;
堆栈->top++;
}
否则{
temp=realloc(堆栈->项目,2*(堆栈->最大大小)*sizeof(项目));
断言(temp!=NULL);
堆栈->项目=温度;
堆栈->项目[堆栈->顶部]=项目;
堆栈->top++;
堆栈->最大大小=(堆栈->最大大小)*2;
}
}
我经常遇到的错误是:
来自Valgrind的消息:
有人能解释一下发生了什么事吗?你在这里一个一个地离开了:
if (stack->top < stack->maxSize+1) {
stack->items[stack->top] = item;
我们是否应该猜测
Stack
和Item
是如何定义的?它们是struct
类型吗?显示它们。不要以图片或图片链接的形式发布错误消息和Valgrind输出。尽可能包括问题中的相关部分。并尽量减少代码。提示:Stack->items值不是malloc()
或realloc()
返回的值。发布代码图片而不是文本是向下投票磁铁。@BrettHale Stack是一个包含整数数组(项为int)、顶部元素和结构的maxSize的结构。
if (stack->top < stack->maxSize) {
stack->items[stack->top] = item;