【发布时间】:2020-12-22 00:38:10
【问题描述】:
我有一个点类型的向量(点是一个包含 2 个整数和一个指向 int, s 的指针的结构),我正在尝试为 s 数组(malloc / new)动态分配内存并向其添加两个值但它给了我段错误。我不知道是否允许我在向量元素内执行此操作。提前谢谢你。
struct point{
int x, y;
int *s;
};
int main(void){
int n, val1, val2, val3, val4, i;
vector<point> v;
v.resize(2);
cin >> n;
for(i = 1; i <= n; i++)
{
cin >> val1 >> val2 >> val3 >> val4;
v[i - 1].x = val1;
v[i - 1].y = val2;
v[i - 1].s = new int[2]; // here i think is the problem.
//v[i - 1].s = (int *)malloc(2 * sizeof(int));
v[i - 1].s[0] = val3;
v[i - 1].s[1] = val4;
}
for(i = 0; i <= v.size(); i++)
{
cout << v[i].x << " " << v[i].y << " " << v[i - 1].s[0] << " " << v[i - 1].s[1] ;
cout << "\n";
}
return 0;
}
【问题讨论】:
-
为什么不改用
std::vector<int> s;?另外,如果n大于您在v中设置的位置,会发生什么情况?为什么i - 1而不是在0开始循环? -
s中是否总是有 2 个整数?如果是这样,std::array<int,2>可能更合适。 -
i <= v.size()看起来像一个错误。v[v.size()]是向量末尾之后的一个元素。当i为0 时,v[i - 1]也是一个错误。
标签: c++ arrays vector dynamic-memory-allocation