首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C语言中重复指针资源的处理

C语言中重复指针资源的处理
EN

Stack Overflow用户
提问于 2018-05-31 16:26:16
回答 2查看 62关注 0票数 0

这是我的一些碰撞检测代码。我使用指针来使我的代码更小,更具可读性(有问题的指针是myBall)。我想知道,当创建针对现有数据的额外指针时,是否应该对额外的指针进行NULL输出或对其调用.free(),以避免运行时可能出现的内存损失。

代码语言:javascript
复制
void SceneUpdate(GameScene* myGs){

//Update code for balls
//We get the last existing ball , which is the moving one presumably
Object* myBall = &(myGs->myBalls[myGs->ballCount - 1]);

//If ball is moving
if (!myBall->isStatic){

    //Move according to velocity
    myBall->position.x += myBall->velocity.x;
    myBall->position.y += myBall->velocity.y;

    //Bounce
    if (myBall->position.x < X_MIN || myBall->position.x > X_MAX) myBall->velocity.x *= -1;

    //Collide with ceiling
    if (myBall->position.y < Y_MIN) {
        myBall->velocity.y = 0;
        myBall->velocity.x = 0;
        myBall->position.y = Y_MIN;
        myBall->isStatic = true;
    }

    //After update calc , update collision data
    myBall->maxExtent.x = myBall->position.x + 7;
    myBall->maxExtent.y = myBall->position.y + 7;

    //Values
                            //y                       //RotOn      //ODisable //Shape
    myBall->myAddress[0] = ( ((int)myBall->position.y << 0) | (0 << 8) | (0 << 9) | (0 << 14) );
                            //x                        //HFlip     //VFlip     //Size        
    myBall->myAddress[1] = ( ((int)myBall->position.x << 0) | (0 << 12) | (0 << 13) | (0 << 14) );
                            //ID               //Priority  //Palette
    myBall->myAddress[2] = ( (myBall->colour << 0) | (0 << 10) | (0 << 12) );   

    //Collision check: After Update, for every not static ball, check collision with statics
    //Edit: Only one ball is non Static at max
    Collision(myGs , myBall->ID);   
}
//Else if static , update does nothing. 
}

我的印象是他们不需要free()方法,因为我不想删除他们所指向的数据。一旦超出范围,它们就已经被处理了吗?

我经常在我的Gba项目中使用这种方法,以使代码更直观,所以我担心可能的内存泄漏。

EN

回答 2

Stack Overflow用户

发布于 2018-05-31 16:38:54

我看不到动态内存分配(没有mallocs,也没有reallocs,只有堆栈中的局部变量,所以它们将根据它们的作用域进行管理),因为您不必释放未分配的动态内存(堆是空的)。

提示一下,为什么要使用大量的局部浮点型变量?这些值已经存在于thisBallotherBall结构中。

编辑:如果myGs是堆中的变量,则必须添加定义myGs并管理其分配的代码。

票数 0
EN

Stack Overflow用户

发布于 2018-05-31 16:48:37

考虑到您没有使用任何malloc,我将只回答您的问题:

每个现代操作系统都会在程序退出后恢复所有分配的内存空间,所以是的,一旦它们超出作用域,它们就已经被处理了,你不必担心内存泄漏。

如果你不使用free(),它也不会有什么坏处;除了你需要更多存储空间的运行时成本,这不是你的情况,因为你说过你不想删除他们所指向的数据。但是对于良好的样式编码,最好在不再需要内存时尽快释放它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50619870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档