次のエラーが表示されます:
「実行時チェックの失敗 #2 - 変数 'mat' の周りのスタックが壊れていました」 コンソールに結果を表示した後。
ただし、私が観察したこと、CreateMatrix 関数はアクセス違反をスローします.. より大きなマトリックス次元の場合。たとえば、5x7 では機能し、50 x 70 では機能しませんでした。
プログラムは、Matrix を作成 (初期化) し、Set + Matrix 要素を出力するだけです。
また、問題の警告は、main() 内で "Matrix* mat.." のようなものを使用しないように求められたことです。それ以外の場合、ソリューションは簡単です。
あなたが私の問題を理解してくれることを願っています。
より詳細なコード:
struct Matrix
{
int width;
int height;
int* data;
};
typedef struct Matrix Matrix;
int main()
{
Matrix mat, *matP;
//1. Things that Works...
matP = CreateMatrix(&mat,700,500);
SetValue(matP,500,600,-295);
int val=GetValue(matP,500,600);
printf("%d\n",val);
//2. Things that does NOT work... !!!
CreateMatrix(&mat,700,500); // this is C-style "Call-By-Reference" CreateMatrix2()
SetValue(&mat,500,600,-295); // ERROR in this function, while setting matrix element
val=GetValue(&mat,500,600);
printf("%d\n",val);
}
void SetValue(Matrix* mat,int row,int col,int value)
{
*(mat[(mat->width*(row-1)) + (col-1)].data) = value;// <------ ERROR here
// Unhandled exception at... Access violation writing location 0x000001f4
}
Matrix * CreateMatrix(Matrix *mat,int width,int height)
{
// mat = (Matrix*)malloc(width*height*(sizeof(Matrix))); // As told by Salgar
mat->height = height;
mat->width = width;
for(int i=0; i < height; i++ )
{
for(int j=0; j < width; j++ )
{
mat[width*i + j].width = width;
mat[width*i + j].height = height;
mat[width*i + j].data = (int*)malloc(sizeof(int));
}
}
}