c++ - 插入集合时出现段错误

标签 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;   
}

这个程序在

处给出了一个段错误
myset[j].insert((int)strtol(pch, NULL, 10));

谁能告诉我为什么?

最佳答案

char *data;
strcpy(data,str[i]);

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

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

关于c++ - 插入集合时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8807335/

相关文章:

c++ - 模板类与非模板类的循环依赖

c++ - make_heap() 编译问题

c++ - c++(98) STL set 是否可以散列一个 int 数组,然后检查该数组是否存在于集合中

scala - 如何在同一个文件中使用可变和不可变集合,在 Scala 中

python - 如何检查 issubset 中以逗号分隔的整个单词?

c++ - 文字数字是否可变?

c++ - Visual Studio 2008 出现错误 C3861 : '__cpuidex' : identifier not found when building OpenCV 2. 4.11

c++ - 如何使用 clangd 支持为 C++ 设置 VS 代码?

c++ - 为什么将 std::auto_ptr<> 与标准容器一起使用是错误的?

java - 是否有一种有效的算法可以将几组数字打包到几个桶中?