矩阵:内存分配问题

Qos*_*smo 1 c allocation matrix

我正在做一个从文本文件读取的程序,以确定矩阵的大小(行和列)和矩阵的相应内容。

我想知道是否是这样的:

int main()
{
int rows = FunctionThatReadsRows();
int cols = FunctionThatReadsCols();
int matrx[rows][cols];
return 0;
}
Run Code Online (Sandbox Code Playgroud)

会工作?还是需要动态分配?我不确定在任何代码运行之前是否初始化了变量?我需要在整个程序中使用矩阵。

如果确实需要动态分配,我应该怎么做? 谢谢。

Oli*_*rth 5

在 C99 之前,您不能声明动态大小的数组(尽管很多编译器都支持它)。在 C99 中,您可以。

如果您不想这样做,则必须malloc在堆上内存,例如:

int *matrix = malloc(sizeof(int) * rows * cols);
Run Code Online (Sandbox Code Playgroud)

但是,您将无法以二维方式对其进行索引;你需要做一些类似的事情matrix[i*cols+j](或者写一个函数/宏来隐藏它)。

完成后记得打电话free(matrix)

  • 值得指出的是,如果您的矩阵很大,无论如何您都会想要对其进行 malloc。C99 中动态大小的数组进入堆栈,您不想将其炸毁。 (2认同)