开发者社区> 问答> 正文

c++中二级指针的释放问题?报错

我用cocos2d-x开发一款游戏,里面用到了二级指针来实现动态长度的二维数组的效果,可是在运行时这个二级指针访问时会无故崩溃,我觉得是指针被无故释放掉了,下面是我使用的方式,之后我会对数组一一赋值,其问题出现具有偶然性,有的时候正常有的时候报错。。c++知识不是很牢固,求大神指点

    Entity *** entitylist;

    entitylist=new Entity**[MAX_HEIGHT];
    for(int i=0;i<MAX_HEIGHT;i++)
    {
        entitylist[i]=new Entity*[MAX_WIDTH];
    }

展开
收起
爱吃鱼的程序员 2020-06-14 17:50:03 588 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你把问题想复杂了

    引用来自“楼雨”的评论

    你把问题想复杂了

    回复 @丁逸鹏:木有呢!如果游戏没有特殊要求,可以考虑使用STL标准库,比如vector什么的。最起码不会引起内存泄漏什么的有二维数组的吧。。我知道二维数组本质上是一位数组,像这样用不可以吗

    二维数组应该是  Entity** entitylist,而不是你上面的 Entity***entitylist.

    数组你可以这样new:

    A*a= new A[n];

    delete []a; 

    二维数组你可以这样new:

    A (*a)[n] = new A[m][n];

    delete []a; 



    回复 @DogFeet:是的回复 @丁逸鹏:你的意思是你要一个二维数组array[m][n]其中每个元素都是一个Entity*而不是Entity??回复 @丁逸鹏:所以呢?。。。那个Entity*是个指针类型啦

    你这个是三级指针了

    2级只需要**

     Entity**entitylist;

       entitylist=newEntity**[MAX_HEIGHT];
       for(inti=0;i<MAX_HEIGHT;i++)
       {

          *entitylist[i]=newEntity[MAX_WIDTH];

       }

    你的错误在于区别不开指针自身和指针所指的内容


    你看看你new的什么东西就释放什么如果下面要释放的话要for{delete[]entityList[i];}delete[]entityList;

    不要用那么蛋疼的东西。

    Entity*arr=newEntity[MAX_HEIGHT*MAX_WIDTH];

    访问的时候arr[i*MAX_WIDTH+j]

    嫌麻烦可以用宏或者类模板。

    2020-06-14 17:50:21
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载