当将数据从文件存储到数组时,编译器特定的分段错误
C++: Compiler-specific segmentation fault when storing data from file into array
我正在编写一个c++程序,它从以下格式的文件("input10")中获取数字:
1 0 12
2 3 24
3 8 9
4 9 2
5 10 3
6 11 4
7 14 8
8 16 10
9 16 3
10 17 12
每个数字进入一个数组p_data[3]
(每行三个数字)。
在Visual Studio中运行时,没有错误,并且正确的数据存储在数组中。我把#define _CRT_SECURE_NO_WARNINGS
包括在这里,这样我就可以用strncpy
。我不确定strncpy
是否是问题的根源。
在CentOS终端上使用g++ -std=c++11
运行时,我得到以下错误消息:
段故障(core dump)
我发现这个问题很难调试。任何想法吗?
#include <iostream>
#include <cstring>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;
void get_processes() {
string curr_line;
ifstream infile("input10");
int p_data[3];
int p = 0;
char line[1024];
while (getline(infile, curr_line)) {
strncpy(line, curr_line.c_str(), sizeof(line));
line[sizeof(curr_line) - 1] = 0;
int p_data_count = 0;
for (int i = 0; line[i] != ' '; ++i) {
if (line[i] != ' ') {
string num = "";
while (line[i] != ' ') {
num += line[i];
++i;
}
if (p_data_count < 3) {
p_data[p_data_count] = stoi(num);
++p_data_count;
}
}
}
}
infile.close();
}
int main() {
get_processes();
return 0;
}
在c++ 11中,我们可以这样解析字符串对象:
void get_processes() {
string curr_line;
ifstream infile("input10");
int p_data[3];
int p = 0;
while (getline(infile, curr_line)) {
int p_data_count = 0;
for (int i = 0; i < curr_line.size(); ++i) {
if (curr_line[i] != ' ') {
string num = "";
while (curr_line[i] != ' ' && curr_line[i] != ' ') {
num += curr_line[i];
++i;
}
if (p_data_count < 3) {
p_data[p_data_count] = stoi(num);
++p_data_count;
}
}
}
}
infile.close();
}
任何c++ 11编译器都可以识别stoi()
方法,并且发生分段错误的机会要小得多。
相关文章:
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 重载方法的方式会在使用临时调用时生成编译器错误
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 编译器错误:destuctor 的更宽松的抛出说明符
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- C++ G++ 编译器 - 错误:隐式声明的定义
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 模板模板参数和模板别名:编译器错误?
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何在C++中克服此 C4430 编译器错误?
- 尝试使用 WinBGI 显示文本时出现编译器错误
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- C++自定义分配器大小参数作为模板参数会引发编译器错误