Попытка выяснить ошибку при присвоении значения в куче выделенной памяти для массива

Я пытаюсь выяснить, почему я получаю ошибку, когда я присваиваю значение структуре в массиве структур в выделенной памяти.

У меня есть следующая структура C:

typedef struct _Point{
int x;
int y;
 }Point;

и массив Point:

typedef Point Sample[];

Теперь я хочу выделить массив Sample в любой Sample, состоящий из 15 точек, и я использовал следующий код:

Sample *new_positions;
data.old_positions =(Sample*) malloc(sizeof(Point) * 15 * global.nsamples);

Когда я пытаюсь использовать его с помощью следующего кода для присвоения значения, у меня появляется ошибка

data.old_positions[0][0].x=5;

В чем проблема?:(

1 ответ

Решение

data.old_positions - это только одно измерение -

 data.old_positions[0].x=5;

Назначает Нулевой предмет. Вам лучше симулировать два измерения, чем строить 2D-массив.

 data.old_positions[0 * 15 + 0].x = 5;

(Sample *)malloc(... эффективно создает одномерный массив без содержимого. Тебе нужно будет распределить по второму измерению

 data.old_positions = (Sample *)malloc(sizeof(Sample) * global.nsamples)
 for (int i = 0; i < global.nsamples; i++) 
     data.old_positions[i] = (Point*)malloc(sizeof(Point) * 15);

Это должно сделать это.

Другие вопросы по тегам