gpt4 book ai didi

c++ - 删除数组的 SFML 析构函数问题

转载 作者:行者123 更新时间:2023-11-28 06:07:37 25 4
gpt4 key购买 nike

我一直在研究我的 spaceInvaders 克隆,现在我正试图通过清理内存泄漏来完成该项目。

目前我正在尝试删除在构造函数中创建的包含 11 个 aliensobjects 的数组,但是在执行此操作时程序在 AlienRow 的析构函数处中断(崩溃)。

我试过以下方法:

在构造函数中创建空指针并用这个删除:

for (int i = 0; i < 11; i++)
{
if (alienRow[i] != nullptr)
{
delete alienRow[i];
}
delete *alienRow;

还有:删除[] alienRow;

关于为什么会出现此问题的任何指示?

#include "AlienRow.h"

AlienRow::AlienRow(float x, float y, int type){
for (int i = 0; i < 11; i++)
{
alienRow[i] = nullptr;
}
if (type == 1){

for (int i = 0; i < 11; i++)
{
alienRow[i] = new Alien(x, y, "Alien1.png");
x = x + 70;
}
}
if (type == 2){

for (int i = 0; i < 11; i++)
{
alienRow[i] = new Alien(x, y, "Alien2.png");
x = x + 70;
}
}
if (type == 3){

for (int i = 0; i < 11; i++)
{
alienRow[i] = new Alien(x, y, "Alien3.png");
x = x + 70;
}
}

}

AlienRow::~AlienRow(){
/*for (int i = 0; i < 11; i++)
{
if (alienRow[i] != nullptr)
{
delete alienRow[i];
}
delete *alienRow;
}*/

delete [] alienRow;
}


void AlienRow::draw(RenderTarget& target, RenderStates states)const{

for (int i = 0; i < 11; i++)
{
target.draw(*alienRow[i]);
}


}

Alien* AlienRow::getAlienRowA(int nr)const{
return alienRow[nr];
}


bool AlienRow::getAlienMove(float x, float y){
for (int i = 0; i < 11; i++)
{
if (alienRow[i]->moveAlien(x, y) == true)
return true;
}
return false;
}



#pragma once
#include "Alien.h"
#include <iostream>


class AlienRow :public sf::Drawable {

private:
Alien* alienRow[11];

float alienVelocity;

public:
Alien* getAlienRowA(int nr)const;
virtual void draw(RenderTarget& target, RenderStates states)const;

bool getAlienMove(float x, float y);
AlienRow(float x, float y, int type);
~AlienRow();
};

外星人:

#include "Alien.h"
#include <iostream>

Alien::Alien(float x, float y, std::string alien){

alienTexture.loadFromFile(alien);
alienSprite.setTexture(alienTexture);
alienSprite.setPosition(x, y);
alienSprite.setScale(sf::Vector2f(0.7f, 0.7f));


}

Alien::~Alien(){

}


void Alien::draw(RenderTarget& target, RenderStates states)const{

target.draw(alienSprite);
}

void Alien::update(float dt){

}

Sprite Alien::getAlienSprite()const{
return alienSprite;
}

void Alien::moveDeadSprite(){
alienSprite.setPosition(alienSprite.getPosition().x, alienSprite.getPosition().y - 700);
}

bool Alien::moveAlien(float x, float y){
alienSprite.move(x, y);
if (alienSprite.getPosition().y > 540){
return true;
}

return false;

}

#pragma once
#include "Entity.h"

class Alien:public Entity{

private:
Sprite alienSprite;
Texture alienTexture;

float velocity;

public:
Sprite getAlienSprite()const;

void moveDeadSprite();
bool moveAlien(float x, float y);

virtual void draw(RenderTarget& target, RenderStates states)const;
virtual void update(float dt);
Alien(float x, float y, std::string alien);
virtual ~Alien();



};

外星虫群

#include "AlienSwarm.h"

AlienSwarm::AlienSwarm(float y){

aRow[0] = new AlienRow(0,y,3);
y = y + 50;
aRow[1] = new AlienRow(0,y,2);
y = y + 50;
aRow[2] = new AlienRow(0, y,3);
y = y + 50;
aRow[3] = new AlienRow(0, y,2);
y = y + 50;
aRow[4] = new AlienRow(0, y,1);
y = y + 50;

}

AlienSwarm::~AlienSwarm(){
for (int i = 0; i < 5; i++)
{
delete aRow[i];
}
}


void AlienSwarm::draw(RenderTarget& target, RenderStates states)const{

for (int i = 0; i < 5; i++){

target.draw(*aRow[i]);
}

}

AlienRow* AlienSwarm::getAlienSwarmA(int nr)const{
return aRow[nr];
}

void AlienSwarm::update(){


}

bool AlienSwarm::getAlienMoveRow(){
for (int i = 0; i < 5; i++)
{
if (aRow[i]->getAlienMove(0, 0.5f) == true)
return true;
}
return false;
}

#pragma once

#include "AlienRow.h"

class AlienSwarm:public Drawable{

private:
AlienRow* aRow[5];
float y;
public:
AlienRow* getAlienSwarmA(int nr)const;

bool getAlienMoveRow();

virtual void draw(RenderTarget& target, RenderStates states)const;
virtual void update();
AlienSwarm(float y);
virtual ~AlienSwarm();



};

最佳答案

将您的 new 调用与您的 delete 调用相匹配。

delete *alienRow;

没有与此匹配的 new。您实际上删除了数组的第一个元素 12 次。删除此行。

delete [] alienRow;

您的数组不是使用 new 创建的。也删除此行。

关于c++ - 删除数组的 SFML 析构函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32057766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com