gpt4 book ai didi

c - 在堆栈上使用 realloc()

转载 作者:行者123 更新时间:2023-11-30 20:54:16 26 4
gpt4 key购买 nike

我正在编写一些简单的堆栈操作,我的数据结构是数组。

#define DEFAULT_VAL 10        //in a separate Header file
int *stacky = (int*) malloc (default_size * sizeof(int));

目标是编写一个函数来动态设置Stack的大小,同时确保元素不丢失。

这是我到目前为止所拥有的:

void Sizer( int size)
{
#undef DEFAULT_VAL
#define DEFAULT_VAL size
maxSize = size;
int *newbuffer = (int*) realloc (stacky, size);
if(newbuffer == NULL) //checking if the 'realloc' was successful :)
{
printf("PROBLEM HERE :)");
}
else
{
stacky = newbuffer;
}
}

在我的 main() 函数中:

int main()
{
int i;
for( i=1; i<15; i++)
{
push(i);
}
Sizer(9);
displayStack();
Sizer(17);
displayStack();
}

输出是:

DEFAULT_VAL is now: 9
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 385207786
3. 3
2. 2
1. 1

DEFAULT_VAL is now: 17
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 50331651
3. 3
2. 2
1. 1

如有任何建议,我们将不胜感激!谢谢

最佳答案

来自手册页:

The realloc() function changes the size of the memory block pointed to by ptr to size bytes.

所以代替:

int *newbuffer = (int*) realloc (stacky, size);

你可能想要

int *newbuffer = (int*) realloc (stacky, size * sizeof(int));

顺便说一句:使用 malloc 和 friend 时不需要强制转换。请参阅Do I cast the result of malloc?

关于c - 在堆栈上使用 realloc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41918690/

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