以下のようなCの関数で配列を作成できないのはなぜですか?
int **image;
int height, weight;//initialized in a method not shown
void generateMatrices()
{
image = (int **)malloc(sizeof(int*) * height);
if(image == NULL)
{
fprintf(stderr, "Image matrix could not be made\n");
exit(-1);
}
int y;
for(y = 0; y < height; y++)
{
image[y] = (int *)malloc(sizeof(int) * width);
if(image[y] == NULL)
{
fprintf(stderr, "Image matrix row %d could not be made\n", y);
exit(-1);
}
}
}
int main(int argc, char* argv[])
{
generateMatrices();
image[height-2][width-2] = 90;//Fails here
return 0;
}
まず、この不明確な質問をしてしまったことをお詫び申し上げます。明確にするために、私はこれらの行列を作成する方法を知っています、そして実際、それは機能します。ただし、そのコードはすべて元々メインステートメントに含まれていたため、さまざまなメソッドにコードを配置してコードをリファクタリングしたいと思いました。これらのメソッドの1つは、generateMatrices()というタイトルです。何らかの理由で、行列はおそらくグローバルであり、メソッド内に存在していても、そのメソッドの外部から、たとえばメインの直後などにアクセスしようとすると、セグメンテーション違反が発生します。
コードをもう少し明確にするための別の編集。
このコードは実際に機能し、このメソッドを呼び出した後、height
明らかに初期化していたことがわかりました。みんなの時間を無駄にするのは悪いことです。width