gpt4 book ai didi

c - 使用 `realloc()` 在 C 数组堆栈中重新使用整数指针

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:55 24 4
gpt4 key购买 nike

我有一个用 C 实现的数组堆栈,我很确定它是正确的。我对以下内容感到困惑。

例如,我可以做类似的事情:

#include "stack.h"
#include <stdio.h>
#include <stdlib.h>

int main(void) {
stack S = Stack();
int *X = malloc(sizeof(int)*3) ;
int *Y = malloc(sizeof(int)*5) ;
int i;
int *M;

for (i=0; i<2; i++) {
X[i] = i*i;
}
X[2] = 10*10;

Push(S, X);

for (i=0; i<4; i++) {
Y[i] = 2*i*i;
}
Y[4] = 2*10*10;

Push(S, Y);

M = Pop(S);
for (i=0; i<5; i++) {
printf("%d - ", M[i]);
}
printf("\n");

M = Pop(S);
for (i=0; i<3; i++) {
printf("%d - ", M[i]);
}
printf("\n");

return 0;
}

打印出来的是:

0 - 2 - 8 - 18 - 200 -
0 - 1 - 100 -

但我不能这样做:

    #include "stack.h"
#include <stdio.h>
#include <stdlib.h>

int main(void) {
stack S = Stack();
int *X = malloc(sizeof(int)*3) ;
int i;
int *M;

for (i=0; i<2; i++) {
X[i] = i*i;
}
X[2] = 10*10;

Push(S, X);

X = realloc(X, sizeof(int) * 5);

for (i=0; i<4; i++) {
X[i] = 2*i*i;
}
X[4] = 2*10*10;

Push(S, X);

M = Pop(S);
for (i=0; i<5; i++) {
printf("%d - ", M[i]);
}
printf("\n");

M = Pop(S);
for (i=0; i<3; i++) {
printf("%d - ", M[i]);
}
printf("\n");

return 0;
}

打印出:

0 - 2 - 8 - 18 - 200 -
0 - 1610612736 - 0 -

为什么我无法使用指针 X 将多个插入堆栈步骤?我只是错误地使用了 realloc 还是在这种情况下不能这样做?

最佳答案

这样做时:

X = realloc(X, sizeof(int) * 5);

不能依赖 X 的先前值(如果系统能够调整当前内存区域的大小,它可能会保持不变,但这根本不能保证),所以如果你存储指针在您的堆栈中,您不能使用 realloc:当 X 内存被移动时,您会得到未定义的行为

关于c - 使用 `realloc()` 在 C 数组堆栈中重新使用整数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768188/

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