C++ cin , Segment fault 11
C++ cin , Segment fault 11
当我输入字符串时,这给了我seg故障11。为什么我有隔离故障?这很简单……隔离断层从何而来?
int main(){
char * str;
printf ("please enter string : ");
cin >> str;
// reverse_str(str);
}
您没有为str
分配任何内存。所以你实际上是在尝试写一个不能保存字符串的指针。本质上,这将导致未定义行为和隔离错误。
解决方案是:
你应该使用std::string而不是指针。
std::string str;
std::cout<<"please enter string : ";
std::cin >>str;
还有,尽量不要把C和c++混在一起。
在c++中使用streams
而不是printf
或者,还有其他两种方法:
不太好其他方法1:
您可以通过将str
设置为固定大小的数组来分配内存:
#define MAX_INPUT 256
char str[MAX_INPUT]={0};
的缺点:
这将要求您需要知道用户在编译时可以输入的最大输入长度,因为c++中不允许可变长度数组。
不太好其他方法2:
您可以使用new []
动态地为str
分配内存。在本例中,str
将是一个指针。
#define MAX_INPUT 256
char *str = new char[MAX_INPUT];
的缺点:
这种方法也有缺点,在这种情况下,由于用户输入的是字符串,因此无法知道在编译时应该分配多少内存。此外,您需要记住通过调用delete[]
来释放内存,否则会泄漏内存。另外,尽量避免在c++中使用new
。
结论:
这里的最佳解决方案是使用std::string
,因为它可以使您避免上述所有问题。
str
没有指向任何合理的东西。你需要有内存来写。
std::string str;
std::cout << "please enter string: ";
std::cin >> str;
您应该使用std::string
。
你的宣言:
char * str;
仅声明一个指针,但不为要存储的字符串分配内存区域。解决方案可以是
char str[256];
或
char * str = new char[256];
然而,它们是非常糟糕的风格,因为每次你想要写入它时,你都必须检查和控制输入的大小。
c++提供std::string
来存储字符串。使用它。
您的第一行char * str
声明了一个原始指针,并且没有初始化它或分配任何内存。这意味着它可以指向任何地方,而且很可能不是有效或有用的地方。当您尝试在第三行使用它时,最有可能出现段错误。你能用std::string
代替吗?
使用std::string
或者,如果你只想使用char *(不鼓励):
char * str = new char[256];
cin >> str;
您需要首先为str
分配内存。你只声明了一个指针
char* str = (char*)malloc(MAX_SIZE_OF_BUFFER);
当程序访问不属于它的内存时,就会发生分段错误。指针str
没有初始化。它不指向任何记忆。流提取操作符>>
不会为它读取的字符串分配新的内存;它期望指针已经指向一个它可以填充的缓冲区。但是,它不知道str
是垃圾。它假定它是一个有效的指针,并尝试写入该内存。由于该垃圾地址处的内存不属于您的程序,因此操作系统会以分段错误将其停止。
改为读入std::string
。更好的是,使用std::getline
,这样用户可以输入带空格的字符串;>>
运算符将只读取到第一个空白字符。
std::string str;
std::getline(cin, str);
- Seg Fault Issue C++ (file IO / getline)
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 循环时无法进入:"Segmentation fault"
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- OpenGL "Segmentation fault"错误
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 如何修复 C++ 中的'Segmentation fault'错误
- unordered_map segment fault
- 创建一个简单的类及其变量和函数不断返回" segmentation fault (core dumped)"、C++
- 在 Mac OS 上遇到的"Segmentation fault: 11" [C++]
- Getter seg fault
- 在 Linux 上实施英特尔 MKL 的 DFT 时"Segmentation fault"
- 尝试读取包含 ints 并存储在 int vector 中的文件,但我不断收到错误"Segmentation fault (core dumped)"
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 我正在尝试通过说话传递一些字符串,它会读取它们,但我得到了"segmentation fault"
- 为什么当我更改此代码时会给我"segmentation fault"错误?
- C++ cin , Segment fault 11
- std::map< MyClass, std::vector<MyClass> > Segment fault。奇怪