分段尝试通过指针索引对象数组数组时出错

时间:2011-09-26 20:30:40

标签: c++ arrays pointers sfml

有人可以告诉我为什么我会遇到分段错误吗?我试着指向一个对象数组的数组,我怎么能解决这个问题?可以在此处找到sf :: Vector2类的声明:http://www.sfml-dev.org/documentation/1.6/classsf_1_1Vector2.php

非常感谢。

#include <SFML/System/Vector2.hpp>
#include <iostream>
class Tet
{
    public:
        Tet();
   private:
        static sf::Vector2 <int> I[4];
        static sf::Vector2 <int> J[4];
        static sf::Vector2 <int> *types[2];

};

sf::Vector2 <int> Tet::I[4] = {sf::Vector2 <int>(0,1),
                               sf::Vector2 <int>(1,1),
                               sf::Vector2 <int>(2,1),
                               sf::Vector2 <int>(3,1)};

sf::Vector2 <int> Tet::J[4] = {sf::Vector2 <int>(1,1),
                               sf::Vector2 <int>(2,1),
                               sf::Vector2 <int>(3,1),
                               sf::Vector2 <int>(3,2)};

sf::Vector2 <int>* Tet::types[2] = { I,J };                                   

Tet::Tet()
{
    //trying to print out x member of first vector of I 
    std::cout << (*(*(types))).x << std::endl; 
}

main()
{
    Tet t = Tet();
}

编辑:g ++编译器

2 个答案:

答案 0 :(得分:1)

您永远不会分配或实例化您引用的types数组。 types是一个指针,您无法将具体值分配给nullptr,这就是您此刻离开的方式。

只需将其声明为数组而不是指针 sf::Vector2<int> types[2][4];

您可能想要考虑一个更简单,更有效的设计,可能是通过使用Vector2对象,Matrix对象,然后是Tet对象,它具有使用STL容器的矩阵集合和算法最好。

答案 1 :(得分:1)

可能首先分配类型并使用{&amp; I,&amp; J}初始化