Matrix * g = (Matrix *)malloc(sizeof(Matrix *));
Это резервирует достаточно места в куче для указателя на матрицу, но вы хотите достаточно места в куче для самой матрицы.Попробуйте:
Matrix* g = (Matrix*)malloc(sizeof(Matrix));
Для полной работающей программы:
#include <stdlib.h>
#include <stdio.h>
typedef struct Matrix {
double * matrix;
int sizex;
int sizey;
} Matrix;
int main()
{
int nn = 257;
Matrix * g = (Matrix *)malloc(sizeof(Matrix));
if (g == NULL)
{
printf("g = malloc() failed\n");
return 1;
}
g->matrix = malloc(sizeof(double) * nn * nn);
g->sizex = nn;
g->sizey = nn;
printf("g %p, g->matrix %p, g->sizex %d, g->sizey %d\n",
g, g->matrix, g->sizex, g->sizey);
return 0;
}
Вывод на мой компьютер Linux:
g 0x8822008, g->matrix 0xf6ea6008, g->sizex 257, g->sizey 257