Не отображаются правильные значения для массива структуры в c - PullRequest
0 голосов
/ 29 апреля 2018

Я играл с динамическим размещением, указателями и структурами, поэтому получил странный результат.
Вот код: -

#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

Пожалуйста, помогите ..

1 Ответ

0 голосов
/ 29 апреля 2018

Причина в том, что ваш код не копирует данные в дополнительное пространство, назначенное для 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;
}
...