gpt4 book ai didi

c++ - 为什么调试器抛出 "read access violation. this was nullptr"异常?

转载 作者:行者123 更新时间:2023-12-01 14:15:52 24 4
gpt4 key购买 nike

第一次在这里发帖,如有新手问题请见谅。我正在尝试为我正在制作的简单游戏创建一个 Snake 类,但调试器不断抛出奇怪的异常。

每次我调试程序时,它都会带我进入一个“vector ”文件,将我指向某一行并说:“读取访问冲突。'this' 是 nullptr”。当我在不调试的情况下运行它时,它只是以消息终止:“退出代码 -1073741819”。

几个小时以来,我一直在努力解决这个问题,但仍然不知道问题出在哪里。是我的代码有问题,还是问题不在于此?提前致谢!

在 Snake.h 中:

#include <vector>

class Snake{
private:
std::vector<sf::RectangleShape> body;
int speed;
public:
Snake();

void draw_body(sf::RenderWindow& windowRef);
void move(sf::RenderWindow& windowRef);

void set_speed(int s);

};

在 Snake.cpp 中:(我还没有完成 Snake::move())

#include "Snake.h"
#include <SFML\Graphics.hpp>

Snake::Snake() : speed{ 10 }, body{ sf::RectangleShape { sf::Vector2f(50.f,50.f) } }{
body.at(0).setPosition(50.f, 50.f);
}
void Snake::draw_body(sf::RenderWindow& windowRef) {
for (sf::RectangleShape rect : body) {
windowRef.draw(rect);
}
}
void Snake::set_speed(int s) {
speed = s;
}
void Snake::move(sf::RenderWindow& windowRef) {
;
}

在 main.cpp 中:

#include <SFML\Graphics.hpp>
#include <iostream>

#include "Snake.h"
class Snake;

int main() {
sf::RenderWindow window(sf::VideoMode(800, 800), "MY window", sf::Style::Close | sf::Style::Titlebar);
Snake* snake{};

while (window.isOpen())
{
sf::Event event;

while (window.pollEvent(event))
{
}




window.clear(sf::Color::White);

snake->draw_body(window);

window.display();




}
return 0;
}

最佳答案

这是因为您的代码具有未定义的行为 (UB)。它可以巧合地工作,也可以毫无征兆地失败,或者可能会发生最奇怪的事情。

调试器通常会格外小心,添加了很多控件。幸运的是,它发现了空指针的使用。事实上,这一行并不像你想象的那样:

Snake* snake{};

没有创建Snakesnake 是指向Snake 的指针。所以你刚刚初始化了一个指针。你认为它的值(value)是什么?

这里最好的选择是摆脱指针:

Snake snake{};   // no *,  so now you have a real snake object ready to use

...
snake.draw_body(window); // no -> since it's no longer a pointer

关于c++ - 为什么调试器抛出 "read access violation. this was nullptr"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62243853/

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