Intel Compilerが2次元配列を動的に取るmallocを食べてくれないでござる

gccではいけるのに、何故がIntel Compilerでは食ってくれない。

#include <stdlib.h>

int main () {
  double **X;
  int i;

  X = (double**) malloc (sizeof (double*) * 10);
  for (i = 0; i < 10; i++)  X [i] = (double*) malloc (sizeof (double) * 10);

  return 0;
}

でいける筈なのになあ。
gccでは無造作に、

$ cc hoge.c -o hoge

でいけるんだけど、Intel Compilerでは、Windowsだけど、

> icl hoge.c

ってすると、コンパイルとリンクはいけるけれど、実行するとエラーが出る。具体的には、

  for (i = 0; i < 10; i++) X [i] = (double*) malloc (sizeof (double) * 10);

の行でエラーが出て、なんか良く分からん。この辺はポインタのポインタとか、そういう話になってしまい、あまり詳しい理解を得ることは面倒なのでしてないので、そういう問題もあるのかも。かといって、初心者的で、教科書的でない書き方は余り好きではないのでなんとも考えもんだなあ。
まあ無理に2次元にするべきものでもないんだけどなあ。doubleへのポインタのポインタとかってすると、そもそも連続的にメモリを取ってくれなさそうだしな。
まあそういうときは、

X = malloc (sizeof (double*) * 10);
for (i = 0; i < 10; i++) X [i] = (double) (X [0] + 10 * i);

みたいなのでもいけそうではある。これが通るかは流石に試してないけどな。