不能用指向指针的指针的值得到指针的相同值?
Can't get the same value of a pointer using the value of a pointer to pointer?
程序崩溃。我正在尝试实现一个 Brick ** create_bricks()
函数,该函数 return 指向 Brick 指针的指针(因为我想创建一个 Bricks 数组和 return 第一个位置)。我正在拔头发,经过几次尝试和失败、错误和研究后,我做的最后一件事是简化我的代码并逐行检查指针的值。当我在绘图函数游戏循环中将 the_brick
取消引用为 *the_brick
时,它获得的值与 new Brick()
在 create_bricks()
内分配给 ptr_brick
的值不同功能。我正在使用 SFML,但问题在于指针。
注意:如果我 return 来自 create_bricks
的 Brick *
经过适当的修改它工作正常(并画砖),但是我需要创建多个积木,而不是一个。
#include "Brick.h"
int main()
{
...
while (window.isOpen())
{
Brick ** ptr_bricks = create_bricks();
Brick * ptr_brick = *ptr_bricks;
window.draw(*the_brick);
}
return 0;
}
Brick ** create_bricks()
{
Brick * ptr_brick = new Brick();
ptrBrick->setPosition(150, 20);
return &ptrBrick;
}
#include "Brick.h"
Brick::Brick()
{
LOG(INFO) << "Brick constructor";
setPosition(10, 10);
setSize(sf::Vector2f(100, 20));
setFillColor(sf::Color::Green);
setOutlineThickness(1);
}
Brick::~Brick()
{
LOG(INFO) << "Brick destructor";
//dtor
}
谢谢
问题出在create_bricks
函数中的return
语句:
return &ptrBrick;
这里你 return 一个指向 local 变量 ptrBrick
的指针。该变量的生命周期将在函数结束时结束,您拥有的任何指向它的指针将在函数结束后立即失效。
从函数 return 一个 "array" 的自然 C++ 解决方案是 return 一个 std::vector
而不是:
std::vector<Brick*> create_bricks()
{
Brick* brick = new Brick;
brick->setPosition(150, 20);
return { brick };
}
如果 Brick
不是多态的 class 你甚至不需要使用指针向量,而是普通 Brick
对象的向量(std::vector<Brick>
).
如果你坚持使用指针,你必须分配一个指向Brick
的指针数组,这意味着new Brick*[number_of_bricks]
(或者new Brick[number_of_bricks]
,如果不需要多态)。
程序崩溃。我正在尝试实现一个 Brick ** create_bricks()
函数,该函数 return 指向 Brick 指针的指针(因为我想创建一个 Bricks 数组和 return 第一个位置)。我正在拔头发,经过几次尝试和失败、错误和研究后,我做的最后一件事是简化我的代码并逐行检查指针的值。当我在绘图函数游戏循环中将 the_brick
取消引用为 *the_brick
时,它获得的值与 new Brick()
在 create_bricks()
内分配给 ptr_brick
的值不同功能。我正在使用 SFML,但问题在于指针。
注意:如果我 return 来自 create_bricks
的 Brick *
经过适当的修改它工作正常(并画砖),但是我需要创建多个积木,而不是一个。
#include "Brick.h"
int main()
{
...
while (window.isOpen())
{
Brick ** ptr_bricks = create_bricks();
Brick * ptr_brick = *ptr_bricks;
window.draw(*the_brick);
}
return 0;
}
Brick ** create_bricks()
{
Brick * ptr_brick = new Brick();
ptrBrick->setPosition(150, 20);
return &ptrBrick;
}
#include "Brick.h"
Brick::Brick()
{
LOG(INFO) << "Brick constructor";
setPosition(10, 10);
setSize(sf::Vector2f(100, 20));
setFillColor(sf::Color::Green);
setOutlineThickness(1);
}
Brick::~Brick()
{
LOG(INFO) << "Brick destructor";
//dtor
}
谢谢
问题出在create_bricks
函数中的return
语句:
return &ptrBrick;
这里你 return 一个指向 local 变量 ptrBrick
的指针。该变量的生命周期将在函数结束时结束,您拥有的任何指向它的指针将在函数结束后立即失效。
从函数 return 一个 "array" 的自然 C++ 解决方案是 return 一个 std::vector
而不是:
std::vector<Brick*> create_bricks()
{
Brick* brick = new Brick;
brick->setPosition(150, 20);
return { brick };
}
如果 Brick
不是多态的 class 你甚至不需要使用指针向量,而是普通 Brick
对象的向量(std::vector<Brick>
).
如果你坚持使用指针,你必须分配一个指向Brick
的指针数组,这意味着new Brick*[number_of_bricks]
(或者new Brick[number_of_bricks]
,如果不需要多态)。