Это правильный способ вернуть массив структур из функции?

Как сказано в заголовке (и предполагает), я новичок в 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
}

Указатель в правильном направлении будет быть оцененным.

5
задан Matt 19 May 2011 в 14:57
поделиться