我写的动态二维数组声明的一个非常简单的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