вероятно
coordinates cordArray = (coordinates *)malloc(cordArray * sizeof(n));
должно быть заменено на
coordinates * cordArray = (coordinates *)malloc(sizeof(coordinates) * n);
, поскольку вы присваиваете coordinates
с coordinates *
, а cordArray
неизвестнои даже если он не может быть преобразован в size_t
(вы не дадите его определение)
Кстати, вы находитесь в C ++, почему вы используете массив C, вы можете выделить его new , позволяющий вызывать конструктор координат для каждой записи или лучше использовать std::vector
, позволяющий изменять размер, доступ к размеру и т. Д.
О ваших замечаниях, эта программа компилируется и запускается:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
double x;
double y;
}coordinates;
int main()
{
printf("Enter amount of coordinates:\n");
int n;
if (scanf("%d", &n) != 1)
puts("invalid number");
else if (n <= 0)
puts("expected a positive number");
else {
coordinates * cordArray = (coordinates *) malloc(sizeof(cordArray) * n);
if (cordArray == NULL)
printf("cannot allocate memory, probably %d too large\n", n);
else {
int i;
for (i = 0; i < n; i++) {
printf("Please enter coordinates for coordinates #%d:\n", i + 1);
if (scanf("%lf%lf", &cordArray[i].x, &cordArray[i].y) != 2){
puts("invalid values");
return -1;
}
}
}
}
}
Обратите внимание, что это код C, почему вы использовали тег C ++?
pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra c.cc
pi@raspberrypi:/tmp $ ./a.out
Enter amount of coordinates:
2
Please enter coordinates for coordinates #1:
1 2
Please enter coordinates for coordinates #2:
3 4