我有一个自定义Vector
typedef的指针数组(只有3个浮点数)。我正在编写一个Wavefront对象加载器,我希望能够在遇到文件中的顶点行时添加到这些向量的数组中。我现在的问题是为新载体分配内存。
typedef struct
{
float x;
float y;
float z;
}
Vector;
Vector *verticies;
Vector tmp;
verticies = new Vector;
long endPtr = sizeof(verticies);
sscanf(line, "v %f %f %f", &verticies[endPtr].x, &verticies[endPtr].y, &verticies[endPtr].z);
return;
.obj
文件中有八个顶点,sizeof(verticies)
的输出始终显示为8。上面代码的问题是新的顶点被赋予*verticies
中的最后一个元素,所以我的问题是; **如何动态地将元素添加到指针数组的末尾?**
答案 0 :(得分:1)
您正在为一个Vector
结构分配空间。
sizeof(vertices)
将是你机器上指针的大小,在这里绝对没有意义。
sscanf(line, "v %f %f %f", &(verticies->x), &(verticies->y), &(verticies->z));
将会满足您的需求。但这只能让您阅读一个Vector
。
您需要分配足够的空间(与行数一样多的向量)并使用for
循环将该行与数组中的偏移量进行匹配。
但你确实应该使用std::vector
和std::ofstream
。
答案 1 :(得分:1)
sizeof(verticies);
总是给出8,因为它是一个指针,你环境中指针的大小是8。
这并不意味着您有8个顶点。
如果你想要8个项目的Vector数组,你需要这样做:
Vector verticies[8];
如果您不知道在编译时需要使用多少Vector
项,则应使用,
std::vctor
。
答案 2 :(得分:1)
你应该使用std::vector
。 (或其他一些标准容器。)
代码中没有任何内容包含指针数组。您只需指向使用Vector
创建的单个new Vector
项目。
sizeof(vertices)
会为您提供vertices
的大小Vector*
。因此,sizeof(vertices)
将始终返回指针在您平台上的大小。
答案 3 :(得分:1)
Vector *verticies;
verticies = new Vector;
首先,verticies
不是Vector
类型的指针数组。它只是指向Vector
的指针。因此,当您创建实例时,vecticies
指向它。离开最后一个实例,它指向后面导致内存泄漏。如果你需要指针数组,那么它将是 -
Vector *verticies[constant];
由于您标记了C ++,std::vector
适合您的程序。
std::vector <Vector> verticies ;
现在,为您创建的每个实例执行push_back操作。