【发布时间】:2016-05-22 18:45:01
【问题描述】:
我正在尝试分配一个指向结构的指针数组,但我的代码有问题。
这是我的结构:
struct Brick {
GameObject2D* handle_;
};
Brick** bricks_;
这就是我尝试为它分配内存的方式:
int bricks_amount_ = 10;
bricks_ = (Brick**)malloc(sizeof(Brick*) * bricks_amount_);
程序崩溃。我已经在它上面做了一个 devenv 来调试问题出在哪里,它在这条线上崩溃了:
for (unsigned short int i = 0; i < bricks_amount_; i++){
bricks_[i]->handle_ = new GameObject2D(); <---------- CRASH!
}
有什么建议吗?
PS:对不起我的英语:P
================================================ ============================
[解决方案]
最后我决定使用 std::vector 代替原始指针:
bricks_.resize(bricks_amount_);
但我已经尝试使 malloc 以不同的方式工作,并且它也可以工作:
bricks_ = (struct Brick*)malloc(sizeof(struct Brick) * bricks_amount_);
或者这个:
bricks_ = new Brick[bricks_amount_];
感谢愿意提供帮助的人!
【问题讨论】:
-
显然
bricks_[i]->handle_访问的是未初始化的内存。bricks_[i]没有被赋值。 -
同样不要混合
malloc()和new(),使用new []分配数组。 -
对@KerrekSB' 注释的附加说明 (+1):malloc 创建了一个可用数组,但内容未初始化,这意味着您的 Brick* 指针都是完全随机的值,可能为 null,可能指向超越星星...您错过的是
game_state_.bricks_[i] = new Brick();,例如。 G。在你崩溃之前,初始化数组中的每个指针。 -
为什么都是指针?为什么任何指针?
-
如果你停止使用原始指针,生活会变得更简单
标签: c++ arrays pointers struct malloc