Как сказано в заголовке (и предполагает), я новичок в C и пытаюсь вернуть массив структур произвольного размера из функции. Я решил использовать malloc
, поскольку кто-то в Интернете, чей умнее меня, заметил, что, если я не выделю память в куче, массив будет уничтожен, когда points_on_circle
завершит выполнение, и будет возвращен бесполезный указатель.
Код, который я представляю, работал, но теперь я все чаще и чаще вызываю эту функцию в своем коде, я получаю ошибку времени выполнения ./ main: free (): недопустимый следующий размер (нормальный): 0x0a00e380
. Я предполагаю, что это связано с моей хакерской реализацией массивов / указателей.
Я пока не звоню бесплатно
, поскольку многие из создаваемых мною массивов должны будут сохраняться на протяжении всего жизненного цикла программы (я буду добавить вызовов free ()
к остатку!).
xy* points_on_circle(int amount, float radius)
{
xy* array = malloc(sizeof(xy) * amount);
float space = (PI * 2) / amount;
while (amount-- >= 0) {
float theta = space * amount;
array[amount].x = sin(theta) * radius;
array[amount].y = cos(theta) * radius;
}
return array;
}
My новаторская структура xy
определяется следующим образом:
typedef struct { float x; float y; } xy;
И пример того, как я вызываю функцию, выглядит следующим образом:
xy * outer_points = points_on_circle(360, 5.0);
for(;i<360;i++) {
//outer_points[i].x
//outer_points[i].y
}
Указатель в правильном направлении будет быть оцененным.