还是 malloc 和 free 的问题
我在程序的一段中用了一个do{}while();在do 中定义了一些数组
do
{
int k = 0;
int temp_gain_k = 0;
gain_k = 0;
int p1 = 0;
int p2 = 0;
int *g_of_gain_k;
g_of_gain_k = (int *)malloc(s*sizeof(int));
for(int gogk=0; gogk<s; gogk++)
{
g_of_gain_k[gogk] = 0;
}
int *mark_v1;
mark_v1 = (int *)malloc(s*sizeof(int));
for(int mv1=0; mv1<s; mv1++)
{
mark_v1[mv1] = 0;
}
int *mark_v2;
mark_v2 = (int *)malloc((N-s)*sizeof(int));
for(int mv2=0; mv2<(N-s); mv2++)
{
mark_v2[mv2] = 0;
}
int *p_order_1;
p_order_1 = (int *)malloc((s+2)*sizeof(int));
for(int porder=0; porder<(s+2); porder++)
{
p_order_1[porder] = 0;
}
int *p_order_2;
p_order_2 = (int *)malloc((N-s+2)*sizeof(int));
for(porder=0; porder<(N-s+2); porder++)
{
p_order_2[porder] = 0;
}
一系列的运算得出gain_k及其他
free(p_order_2);
free(p_order_1);
free(mark_v1);
printf("here 1111111111111111\n");
free(mark_v2);
printf("here 2222222222222222\n");
free(g_of_gain_k);
printf("here 33333333333333333\n");
/*.............*/
} while(gain_k > 0);
调试的时候,只能
显示 here 1111111111111111111
然后系统跳出对话框“应用程序异常”
而把 free(mark_v2);
free(g_of_gain_k);
注释掉之后,就正常了。而且结果也对。
free(mark_v2);和 free(g_of_gain_k);有任何一个没被注释掉,就会出错。
我确定在do{}while();之外,没有用到mark_v2【】 和g_of_gain_k【】
这是怎么回事,请指教。