Матрица: вопрос распределения памяти - PullRequest
1 голос
/ 28 октября 2010

Я делаю программу, которая читает из текстового файла, чтобы определить размер матрицы (строки и столбцы) и соответствующее содержимое матрицы.

Мне было интересно, если что-то вроде:

int main()
{
int rows = FunctionThatReadsRows();
int cols = FunctionThatReadsCols();
int matrx[rows][cols];
return 0;
}

Будет работать?Или это должно быть динамически распределено?Я не уверен, что переменные инициализируются до запуска какого-либо кода?Мне нужно работать с матрицей по всей программе.

И если это нужно динамически распределять, как мне это сделать? Спасибо.

1 Ответ

4 голосов
/ 28 октября 2010

До C99 нельзя было объявлять массивы динамического размера (хотя это поддерживается многими компиляторами). В C99 можно.

Если вы не хотите этого делать, вам нужно будет malloc памяти в куче, например ::100100

int *matrix = malloc(sizeof(int) * rows * cols);

Однако вы не сможете индексировать это в двумерном виде; вам нужно будет сделать что-то вроде matrix[i*cols+j] (или написать функцию / макрос, чтобы скрыть это).

Не забудьте позвонить free(matrix), когда вы закончите с этим!

...