Попытка выяснить ошибку при присвоении значения в куче выделенной памяти для массива
Я пытаюсь выяснить, почему я получаю ошибку, когда я присваиваю значение структуре в массиве структур в выделенной памяти.
У меня есть следующая структура 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);
Это должно сделать это.