gpt4 book ai didi

c - 未显示 c 中结构数组的正确值

转载 作者:行者123 更新时间:2023-11-30 14:49:00 26 4
gpt4 key购买 nike

我正在研究动态分配、指针和结构,所以我得到了一个奇怪的结果。
这是代码:-

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define NEW_POINT(x) (POINT *)malloc(x*sizeof(POINT))
#define EXTEND(ptr,size) (POINT *)realloc(ptr,size*sizeof(POINT))

typedef struct p{
int x;
int y;
}POINT;
POINT *g;

void show(POINT *s){
printf("x = %d\ty = %d\n",s->x,s->y );

}
POINT* getPoint() {
POINT *t = NEW_POINT(1);
t->x = rand()%50;
t->y = rand()%50;
return t;
//memcpy(g,t,sizeof(*t));
}

int main() {
POINT *temp;
srand(time(NULL));
g = getPoint();
show(g);
g = EXTEND(g,2);
show(g);
temp = g;
temp++;
temp = getPoint();

//free(temp);
show(g);
show(++g);

return 0 ;
}

我在这里创建两个元素数组,过程有点棘手。我期望最后一行应该显示数组的 g[0] 和 g[1]。
但是输出是这样的。 Output of the program

请帮忙..

最佳答案

原因是您的代码没有将数据复制到您为 POINT * 分配的额外空间中。我修改了 main() 中的代码,将数据复制到该空间中,以下应该可以工作。

int main() {
POINT *temp;
srand(time(NULL));
g = getPoint();
show(g);
g = EXTEND(g,2);
show(g);
temp = getPoint();

/* This line copies the data from the new point referred to by temp
into the extra space you allocated for g[1].*/
memcpy(g+1, temp, sizeof(POINT));

//free(temp);
show(g);
show(++g);
return 0;
}

关于c - 未显示 c 中结构数组的正确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50081329/

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