C++ 将元素添加到指针数组

C++ 将元素添加到指针数组,c++,pointers,C++,Pointers,我有一个自定义Vectortypedef的指针数组(只有3个浮点数)。我正在编写一个波阵面对象加载器,我希望能够在遇到文件中的顶点行时添加到这些向量的数组中。我目前的问题是为新向量分配内存 矢量 解析行并保存在内存中 .obj文件中有八个顶点,sizeof(vertices)的输出始终显示8个顶点。上面代码的问题是,新的顶点被赋予了*vertices中的最后一个元素,所以我的问题是;**如何将元素动态添加到指针数组的末尾?***您正为一个向量结构分配空间 sizeof(顶点)将是计算机上指针的大

我有一个自定义
Vector
typedef的指针数组(只有3个浮点数)。我正在编写一个波阵面对象加载器,我希望能够在遇到文件中的顶点行时添加到这些向量的数组中。我目前的问题是为新向量分配内存

矢量 解析行并保存在内存中
.obj
文件中有八个顶点,
sizeof(vertices)
的输出始终显示8个顶点。上面代码的问题是,新的顶点被赋予了
*vertices
中的最后一个元素,所以我的问题是;**如何将元素动态添加到指针数组的末尾?***

您正为一个
向量
结构分配空间

sizeof(顶点)
将是计算机上指针的大小,在这里绝对没有意义

sscanf(line, "v %f %f %f", &(verticies->x), &(verticies->y), &(verticies->z));
会做你需要的事。但这只允许您读取单个
向量
。 您需要分配足够的空间(尽可能多的向量,只要有行)并使用
for
循环将行与数组中的偏移匹配


但您确实应该使用
std::vector
std::ofstream

您正为一个
向量
结构分配空间

sizeof(verticies);
sizeof(顶点)
将是计算机上指针的大小,在这里绝对没有意义

sscanf(line, "v %f %f %f", &(verticies->x), &(verticies->y), &(verticies->z));
会做你需要的事。但这只允许您读取单个
向量
。 您需要分配足够的空间(尽可能多的向量,只要有行)并使用
for
循环将行与数组中的偏移匹配

但您确实应该使用
std::vector
std::ofstream

sizeof(verticies);
总是给8,因为它是一个指针,所以在您的环境中指针的大小是8

这并不意味着你有8个顶点

如果需要8项向量的数组,则需要执行以下操作:

Vector verticies[8];
如果您不知道编译时需要使用多少
Vector
项,则应使用
std::vctor

总是给8,因为它是一个指针,所以在您的环境中指针的大小是8

这并不意味着你有8个顶点

如果需要8项向量的数组,则需要执行以下操作:

Vector verticies[8];
如果您不知道编译时需要使用多少
Vector
项,则应使用
std::vctor

您应该为此使用。(或其他一些标准容器。)

代码中没有任何内容包含指针数组。您所拥有的只是一个指向单个
向量
项的指针,该项是您使用
新向量
创建的

sizeof(顶点)
将为您提供
顶点的大小,这是一个
向量*
。因此
sizeof(顶点)
将始终返回平台上指针的大小。

为此,您应该使用。(或其他一些标准容器。)

Vector *verticies;
verticies = new Vector;
代码中没有任何内容包含指针数组。您所拥有的只是一个指向单个
向量
项的指针,该项是您使用
新向量
创建的

sizeof(顶点)
将为您提供
顶点的大小,这是一个
向量*
。因此
sizeof(顶点)
将始终返回平台上指针的大小

Vector *verticies;
verticies = new Vector;
首先,
vertices
不是
Vector
类型的指针数组。它只是指向向量的指针。因此,在创建实例时,
vectices
会指向它。留下它指向的最后一个实例导致内存泄漏。如果您需要指针数组,那么-

Vector *verticies[constant];

自从您标记C++, STD::vector < /C> >适合您的程序。

std::vector <Vector> verticies ;
std::向量垂直;
现在,对创建的每个实例执行push_back操作

首先,
vertices
不是
Vector
类型的指针数组。它只是指向向量的指针。因此,在创建实例时,
vectices
会指向它。留下它指向的最后一个实例导致内存泄漏。如果您需要指针数组,那么-

Vector *verticies[constant];

自从您标记C++, STD::vector < /C> >适合您的程序。

std::vector <Vector> verticies ;
std::向量垂直;

现在,为您创建的每个实例做一个推送回退操作。< /p>嗨,您确信C++标签是否合适?我能看到的唯一C++内容是<代码>运算符new <代码>。其他一切都是纯C。那么是的,它是。这也被封装在一个类中。在类中包装一些东西并不能使它成为C++,它使C成为类。嗨,你确定C++标签是否合适?我能看到的唯一C++内容是<代码>运算符new <代码>。其他一切都是纯C。那么是的,它是。这也被封装在一个类中。在类中包装一些东西并不能使它成为C++,它使C成为类。如果OP在编译时已经知道元素数量的大小,他/她根本不需要使用

std::vector
,一个简单的数组就足够了。“每当遇到文件中的顶点行时,我希望能够将这些向量添加到数组中”-我不认为他/她不认为:-)之前我写了一个加载程序,在文件中迭代一次,计算垂直面、面等的数量,分配了正确的内存量,然后再次进行加载,将数据加载到RAM中。不太理想,这就是我问我问题的原因。如果OP在编译时已经知道元素数量的大小,他/她根本不需要使用
std::vector
,一个简单的数组就足够了。“我希望在遇到文件中的顶点行时能够将这些向量添加到数组中”-我不认为他/她不认为:-)之前我写了一个加载程序,在文件中迭代一次,计算垂直面、面等的数量,分配了正确数量的内存