插入集合时出现分段错误

Vij*_*jay 1 c++ stl set

我写了一个示例程序:

#include<iostream>
#include<set>
#include<conio.h>
using namespace std;
int main()
{
    set<int> myset[4];
    char *str[4]={"1-2-3-4","3-4-34-3","7-45-35-3","67-45466-3633-3"};

    for(int i=0;i<4;i++)
    {
     char *data;
     strcpy(data,str[i]);
     char *pch;
      pch = strtok (data,"-");
              for(int j=0;pch != NULL&&j<4;j++)
              {
               myset[j].insert((int)strtol(pch, NULL, 10));
               pch = strtok (NULL, "-");
              }
    }  

getch();
return 0;   
}
Run Code Online (Sandbox Code Playgroud)

该程序给出了分段错误

myset[j].insert((int)strtol(pch, NULL, 10));
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么?

Alo*_*ave 6

char *data;
strcpy(data,str[i]);
Run Code Online (Sandbox Code Playgroud)

尝试将数据复制到未分配的指针并导致未定义的行为.
您的指针应指向一个足够大的已分配内存,以容纳您要复制到其中的数据.

理想的解决方案是在C++编程时使用std::string和忘记char *.