将元素添加到指针数组

时间:2011-07-30 14:01:08

标签: c++ pointers

我有一个自定义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中的最后一个元素,所以我的问题是; **如何动态地将元素添加到指针数组的末尾?**

4 个答案:

答案 0 :(得分:1)

您正在为一个Vector结构分配空间。

sizeof(vertices)将是你机器上指针的大小,在这里绝对没有意义。

sscanf(line, "v %f %f %f", &(verticies->x), &(verticies->y), &(verticies->z));

将会满足您的需求。但这只能让您阅读一个Vector。 您需要分配足够的空间(与行数一样多的向量)并使用for循环将该行与数组中的偏移量进行匹配。

但你确实应该使用std::vectorstd::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操作。