我写了一个示例程序:
#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/