私は次のように新しいtypedefを定義しました:
typedef struct matrep
{
int rows, columns; /*rows/columns represent the number of rows/columns in the matrix, data represents matrix entries.*/
double *data;
}
MATRIX;
今、私がやろうとしているのは、関数gen_matrixを使用して、この構造体をランダムなdouble値で埋めることです。gen_matrixは、MATRIX構造へのポインターを受け取り、同じものを返します。
ただし、以下のプログラムを実行すると、ランタイムエラーが発生します。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct matrep
{
int rows, columns; //rows and columns represent the number of columns in the matrix, data represents matrix entries.//
double *data;
}
MATRIX;
double random();
MATRIX *gen_matrix(MATRIX *ptr);
int main()
{
MATRIX *somepointer;
somepointer -> rows = 2; //The program crashes when I try to execute this.//
somepointer -> columns = 2;
}
double random()
{
double f = (double)rand() / RAND_MAX; //Generating a random number between -100 and 100//
return (-100 + f*(200));
}
MATRIX *gen_matrix(MATRIX *ptr)
{
int i, j;
int m, n;
MATRIX *newdata;
m = ptr -> rows;
n = ptr -> columns;
newdata = (MATRIX *)malloc(sizeof(double)*(m*n)); //Allocating suitable space.//
ptr = newdata;
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
*(ptr -> data)= random(); //Setting the value of each and every matrix entry to a random double.//
(ptr -> data)++;
}
}
return ptr;
}
2つの問題があると思います:1:何らかの理由で、上記のようにmain()で「行」と「列」の値を設定するのは間違っています。2:gen_matrix関数にも問題がある可能性があります。
だから私の質問は、どうすれば両方の問題を修正できるでしょうか?(注:私のrandom()関数は間違いなく大丈夫です)。