我寫的動態二維數組聲明的一個非常簡單的C代碼,並與memset
初始化,然後打印出值。我的代碼的東西如下:
float **env;
int i,j,num;
printf("Enter a number : \n");
scanf("%d",&num);
env = (float **)malloc(num*sizeof(float *));
for(i=0;i<num;i++)
{env[i] = (float *)malloc(num*sizeof(float));}
memset(env, 0, sizeof(float)*num*num);
for(i=0;i<num;i++)
{ for (j=0;j<num;j++)
{
printf("%f\t",env[i][j]);
if (j == num -1)
{ printf("\n\n");}
}
}
for(i=0;i<num;i++)
{free(env[i]);
}
free(env);
當我編譯程序,沒有編譯錯誤或警告,但是當我嘗試打印出來的值,我無法打印。然後我調試的程序,和ENV 2D可變正顯示出類似 CXX0030: Error: expression cannot be evaluated
的memset
語句後,當我打印值會出現一個窗口,顯示
Unhandled exception at 0x008b1e27 in ***.exe: 0xC0000005: Access violation reading location 0x00000000.
我試圖明確地初始化二維數組ENV爲0使用2 for循環,它可以很好地工作,我也可以打印這些值,但是當我使用memset
時它不起作用。如果有人能幫助我,那將會非常有幫助。謝謝。
感謝您的意見,我包括你在我的代碼中提到的。所以考慮你所提到的,是否有任何方法將2D數組初始化爲0而不明確使用2 for循環? – duttasankha
@duttasankha:查看我答案的第二部分。你的代碼是不可能的。但是如果你改變我的答案中所示的分配方案,它將成爲可能。 – AnT
感謝您的幫助。但是,當我停止鑄造malloc然後我編譯器扔我錯誤像 錯誤:類型「void *」的值不能分配給類型「浮動**」的實體 錯誤:值類型「void *「不能分配給」float *「類型的實體 我該怎麼做才能做到這一點。我正在使用Microsoft Visual Studio 2010 – duttasankha