構造体のことについて質問があります。

typedef struct data{
  int **data;
}Data;
という構造体があったとして、以下のようにmain()からfunc()に構造体を渡した場合、
正常に動くのでしょうか?

main(){
  Data a;
  int **data;
  data = (int**)malloc(sizeof(int*)*10);
  for(i=0;i<10;i++)
    data[i] = (int*)malloc(sizeof(int)*10);
  a->data = data;
  func(a);
}

func(Data *a){
  int i,j,sum=0;
  for(i=0;i<10;i++)
    for(j=0;j<10;j++)
      sum += a->data[i][j];
}

つまり何を聞きたいのかというと、
2次元配列を動的確保した構造体を別の関数に渡した場合、
その配列に正常にアクセスできるのか、ということです。
自分で試したところ、一応動いているみたいなのですが、なんかすごく不安です。