我有一个带有数组成员的struct
。我成功地使用值填充此数组。我然后将它传递给一个函数,然后我尝试访问这些相同的值,导致访问冲突。有任何想法吗?
这是我的结构定义:
struct testStruct{
vec3* arr;
void resizeVerts(int size) {
arr= new vec3[size];
}
};
我按如下方式调整大小并填充数组:
testStruct->resizeVerts(vertices.length());
for (int i = 0; i < vertices.length(); i++) {
testStruct->arr[i].x = vertices[i].x;
testStruct->arr[i].y = vertices[i].y;
testStruct->arr[i].z = vertices[i].z;
}
现在将它传递给一个函数(这是出现错误的地方):
void ReadFromStruct(struct testStruct){
vec3 tempArr[1500] = {};
for (int i = 0; i < vertices.length(); i++) {
tempArr[i].x=testStruct[i].x;
tempArr[i].x=testStruct[i].y;
tempArr[i].x=testStruct[i].z;
}
我尝试使用矢量,但导致矢量下标超出范围。
for (int i = 0; i < vertices.length(); i++) {
std::vector<vec3> temp;
temp[i].x = vertices[i].x;
temp[i].y = vertices[i].y;
temp[i].z = vertices[i].z;
testStruct.push_back[temp];
}
使用向量并调整大小我现在尝试了以下内容:
testStruct->arr.reserve(vertices.length());
for (int i = 0; i < vertices.length(); i++) {
testStruct->arr[i].x = vertices[i].x;
testStruct->arr[i].y = vertices[i].y;
testStruct->arr[i].z = vertices[i].z;
}
和
testStruct->arr.reserve(vertices.length());
for (int i = 0; i < vertices.length(); i++) {
std::vector<vec3> temp;
temp.reserve(vertices.length());
temp[i].x = vertices[i].x;
temp[i].y = vertices[i].y;
temp[i].z = vertices[i].z;
testStruct->arr.push_back(temp[i]);
}
两者都给我矢量下标超出范围崩溃。
答案 0 :(得分:1)
怎么样:
struct testStruct{
std::vector<vec3> arr;
void resizeVerts(int size) {
arr.resize(size);
}
};
这样可以避免泄漏内存,如果它可以工作的话。
然后避免在代码的某些部分中生成testStruct
指针,而是使用引用或局部变量。
最后struct
就像任何C ++关键字一样小。