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;