代码出错
发表在C语言图书答疑 2020-06-18 《C语言项目开发实战入门》第2章 挑战2048 85页-86页
是否精华
版块置顶:
int *add(int item[]) 
{
 int i = 0; 
 int j = 0;
 int tmp[4] = {0,0,0,0};
 int tep[4] = {0,0,0,0};
 for(i = 0; i < 4 ;i++)    //记录一行或一例的数字  
 {
  if(item[i] ! = 0)
   {
    tep[j++] = item[i];
   }
 }
 for(i = 0; i <4 i++)
 {
  if(tep(i) == tep[i+1])
  {
   tep[i] += 2;
   tep[i + 1] = 0;
   score = score+tep[i]; 
  }
 }
 j = 0;
 for(i = 0; i < 4 ;i++)    //记录一行或一例的数字  
 {
  if(item[i] ! = 0)
   {
    tmp[j++] = tep[i];
   }
 }
 return (int *)(&tmp);
}

这个的返回值为数组  这个为局部变量 它的生命周期当然也随着它所在的函数一起 随着add函数调用的结束,其中的各种局部变量也将被系统收回,理所当然的数组也将被收回   内容也就没有了  

无论你以后的程序如何接受这个数据不一定为原来的值           这是否是构成了野指针  


2020-06-18 19:15:58编辑
分享到:
精彩评论 2
李木子
学分:2954 LV11
2020-06-19
沙发

你好:

   最后指向了null吧

fengqiang
学分:36 LV2
2020-06-19
板凳

李木子 发表于2020-06-19 09:07

你好:

   最后指向了null吧

对   这是书上的源码    不知道这个函数如何调用的  最后还是成功的 

for(i = 0; i < 4; i++)
   {
             tp[0] = BOX[0][i];      //把一列数移到中间变量
             tp[1] = BOX[1][i];
             tp[2] = BOX[2][i];
             tp[3] = BOX[3][i];
             p = add(tp);            //获得合并之后的数值
              if(!ifMove(tp))   //判断是否可以移动,可以移动,则新出现一个数字;不能移动但按键了,也不会出现新数字
//if(ifup())
    {
     j++;          //向上移动
    }
              BOX[0][i] = p[0];       //把处理好的中间变量移回来
             BOX[1][i] = p[1];
             BOX[2][i] = p[2];
             BOX[3][i] = p[3];

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照