gpt4 book ai didi

c - 重新分配() : invalid next size glibc detected

转载 作者:行者123 更新时间:2023-11-30 19:43:48 25 4
gpt4 key购买 nike

我正在使用动态分配的数组来实现堆栈。一旦数组已满,我需要重新分配数组并使其成为初始数组的两倍。

我的代码:

typedef int Item;
typedef struct stackImp *Stack;
struct stackImp{
Item * items;
int top;
int maxSize;

Stack createStack (void){
Stack s = malloc(sizeof(struct stackImp));
assert(s != NULL);
s->items = malloc(DEFAULT_SIZE * sizeof(Item));
assert(s->items != NULL);
s->top = 0;
s->maxSize = DEFAULT_SIZE;
return s;

void push (Stack stack, Item item)
.
.
.
if (stack->top < stack->maxSize) {

//Over here I'm checking if the top index is less than the
//maximum Items the array can store. If it's less then it pushes the
//item to the top of the array.

stack->items[stack->top] = item;
stack->top++;
}
else {
//If the index is greater than or equal to the maximum size then
//I realloc a new array which is twice the size of the initial array.

temp = realloc(stack->items, 2*(stack->maxSize) * sizeof(Item));
assert (temp != NULL);
stack->items = temp;
.
.
.
}

当我将项目插入堆栈时,它工作得很好,但是当我插入超过初始 maxSize 时,它​​会出现以下错误:

很明显,我的 realloc 函数做错了什么,但我无法找到问题所在。

这是 valgrind 输出:

最佳答案

您的代码有点令人困惑,因为 stack->top 实际上并不指向实际堆栈顶部的索引。这可能会对代码的其他部分造成一些困惑,因为您必须使用 stack->items[stack->top-1] 而不是 stack->items[stack->top] 来访问堆栈顶部。

请仔细检查此类内容。此错误可能是由内存损坏引起的。了解如何使用内存调试器。

我建议您尝试使用列表而不是数组来实现堆栈。

关于c - 重新分配() : invalid next size glibc detected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29158974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com