C++ C++;:结构中的向量,推回错误

C++ C++;:结构中的向量,推回错误,c++,vector,struct,C++,Vector,Struct,我正在尝试将数据保存在structs中的向量中。因为我不知道每个数据的长度,所以我使用了push_back。但是,for循环不起作用,在第一次I循环后,我得到了命令终止 我试了几个答案,比如,但都不管用 以下是我尝试的简化版本(并给出了相同的错误): #包括 #包括 使用名称空间std; 类型定义结构{ 向量词; }数据结构; void add(数据结构*数据){ 对于(int i=0;i而言,您几乎就到了。以下是正确的方法:- #include <iostream> #includ

我正在尝试将数据保存在structs中的向量中。因为我不知道每个数据的长度,所以我使用了
push_back
。但是,
for循环
不起作用,在第一次
I
循环后,我得到了
命令终止

我试了几个答案,比如,但都不管用

以下是我尝试的简化版本(并给出了相同的错误):

#包括
#包括
使用名称空间std;
类型定义结构{
向量词;
}数据结构;
void add(数据结构*数据){

对于(int i=0;i而言,您几乎就到了。以下是正确的方法:-

#include <iostream>
#include <vector>

using namespace std;

typedef struct{
    vector<int> words;
}DATA_STRUCT;

void add(DATA_STRUCT *data){
    for(int i=0; i<5; i++){
        for(int s=0;s<3; s++){
            data[i].words.push_back(s);  //<-- edit
            cout << i << s << endl;
        }
    }
}

int main(){
    DATA_STRUCT *data = new DATA_STRUCT[5]; 
    add(data);
    cout << data[0].words[0] << endl;  //<-- edit
    delete[] data;                     //Thank juanchopanz
}
它是新的,没有删除,因此我还添加了
删除[]数据;
(谢谢juanchopanza)

Edit2 要回答Tom de Geus:-

有没有办法避免这里的新情况

以下是更好的版本:-

DATA_STRUCT data[5];
add(data);
cout << data[0].words[0] << endl;
数据结构数据[5];
添加(数据);
cout words
数据结构::words

这是一个错误的地址,但就(仅)语法而言,它是正确的。
地址错误~undefined behavior=可以正常工作/工作但错误/崩溃问题在于:

(&data)[i] -> words.push_back(s);
&data
计算为
数据结构**data
。通过使用
(&data)[i]
,您正在访问不应该访问的内存,这会导致未定义的行为

这条线可以简单得多

data[i].words.push_back(s);

我比伟大的R Sahu跑得快,Brwaaa!这是我今天的骄傲。@javaLover,你真是太好了:)有没有办法避免这里的
新的
?但我想在这种情况下,清理仍然应该是自动的?考虑到您正在发布代码,在第一个示例中提到内存泄漏并修复它可能是个好主意。@juanchopanza同意。我会修复它。太好了!我认为最好指出这些问题。@javaLover为什么我们可以使用它添加函数中的数据是指针的结构吗?
(&data)[i] -> words.push_back(s);
data[i].words.push_back(s);