Выделение памяти для динамического массива
Я пытаюсь добавить к массиву точек в ломанной линии lineString.points ещё одну точку point. Но, если ввести число больше 5, то при выделении доп. места в массиве элементы 4, 5 и 6 меняются. Объясните, пожалуйста, из-за чего это происходит и что нужно исправить.
#include <stdio.h>
#include <malloc.h>
struct Point {
int x;
int y;
} typedef Point;
struct LineString {
Point *points;
int pointsNumber;
} typedef LineString;
int main()
{
Point point;
LineString lineString;
printf("Введите кол-во точек: ");
scanf("%d", &lineString.pointsNumber);
lineString.points = (Point*) malloc (lineString.pointsNumber * sizeof(Point));
for (int i = 0; i < lineString.pointsNumber; i++) {
lineString.points[i].x = i;
lineString.points[i].y = i;
}
point.x = lineString.pointsNumber;
point.y = lineString.pointsNumber;
lineString.points = (Point*) realloc (lineString.points, sizeof(Point));
lineString.points[lineString.pointsNumber] = point;
lineString.pointsNumber++;
for (int i = 0; i < lineString.pointsNumber; i++) {
printf("Point %d = (%d, %d)\n", i + 1, lineString.points[i].x,
lineString.points[i].y);
}
return 0;
}
Ответы (1 шт):
Собственно, а что вы хотите?
lineString.points = (Point*) realloc (lineString.points, sizeof(Point));
Здесь вы оставили в 'lineString.points' указатель на одну Point, все остальные вообще-то отброшены и могут быть перезаписаны. А то, что у вас это не влияет на вывод при вводе 5 — просто несчастливая случайность...
Хотите память увеличить?
lineString.points = (Point*) realloc(lineString.points,
sizeof(Point)*(lineString.pointsNumber+1));
И, кстати, не забывайте проверить, что на самом деле возвращает функция — что malloc, что realloc. Мало ли..
И еще — в С приведение типа (Point*) не требуется.

