realloc():下一个大小无效

时间:2015-03-18 11:58:51

标签: 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(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;
    } 
}

我一直得到的错误是:enter image description here 来自Valgrind的消息:enter image description here

有人可以解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:0)

你在这里一个人:

if (stack->top < stack->maxSize+1) {
    stack->items[stack->top] = item;

stack->items[index]的有效索引是[0..maxSize-1],因此您需要将条件更改为:

if (stack->top < stack->maxSize) {
    stack->items[stack->top] = item;