c++ - C++ - 程序收到信号 SIGSEGV,分段错误。在 msvcrt!memcpy () (C:\Windows\System32\msvcrt.dll)
问题描述
我要回到 c++ 并且我正在使用 code::blocks。一切都很好,但不知从何而来我开始得到这个错误
'
Program received signal SIGSEGV, Segmentation fault.In msvcrt!memcpy () (C:\Windows\System32\msvcrt.dll)
'
代码编译时没有错误,但是当我选择选项 1“[1] - ...”时,它会抛出该错误。
我用谷歌搜索了一下,但我找不到任何相关或可以帮助我解决这个问题的东西。
我的代码是这样的:
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int SeeData();
int ChangeData();
string AddTodo();
class Data {
public:
string name;
string surname;
string age;
string salary;
string todo[];
};
string dataArr[] = {"Bernardo", "Piedade", "19", "540.50"};
string todoArr[] = {"Create new functions"};
int sizeOfTodoArr = sizeof(todoArr) / sizeof(*todoArr);
int main() {
int _menuInput;
while (_menuInput != 0) {
cout << "[1] - See data\n[2] - Change data\n[3] - Add TODO\n[0] - "
"Exit\n\n>>";
cin >> _menuInput;
if (_menuInput == 1) {
SeeData();
} else if (_menuInput == 2) {
ChangeData();
} else if (_menuInput == 3) {
AddTodo();
} else if (_menuInput == 0) {
system("exit");
} else {
cout << "Option not available";
system("cls");
}
}
return 0;
}
int sizeOfData = sizeof(dataArr) / sizeof(*dataArr);
int SeeData() {
Data _myData;
_myData.name = dataArr[0];
_myData.surname = dataArr[1];
_myData.age = dataArr[2];
_myData.salary = dataArr[3];
string person[sizeOfData];
for (int i = 0; i < sizeOfTodoArr; i++) {
_myData.todo[i] = todoArr[i];
}
for (int i = 0; i < sizeOfData; i++) {
person[i] = dataArr[i];
}
for (int i = 0; i < sizeOfData; i++) {
cout << "Name: " << person[0] << "\nSurname: " << person[1]
<< "\nAge: " << person[2] << "\nSalary: " << person[3] << "\n\n";
cout << "Todo List: \n\t";
for (int j = 0; j < sizeOfTodoArr; j++) {
cout << "\n\t" << todoArr[j];
}
}
}
int ChangeData() {}
string AddTodo() {}
编辑:正如 u/Uninitialized 所说,发生错误是因为数组 todo[] 没有起始大小。
解决方案
(0xC0000005) 错误代码表示内存访问冲突。错误消息显示 msvcrt.dll 文件中的 memcpy() 例程引起的分段错误,即使您没有明确使用该指令。类 Data 中的 todo[] 成员似乎很可疑,因为它没有分配固定大小(不了解您的编译是如何成功的,但您可能应该将其初始化为已知大小并检查)
推荐阅读
- javascript - 面对错误 x is not a function with prototypes in JavaScript
- jquery - 如何从同一类中选择两个文本?
- c# - 如何根据 Umbraco 匹配表
- c++ - 对等体断开连接后 SSL 内存未释放
- performance - 从 Nginx 代理为 ASP.NET Core SPA 应用程序提供静态文件
- python - for i in range(n) 的结束条件
- excel - 如何在 SUMIF 函数中使用过滤范围
- python-3.x - 一旦你停止说话,你怎么能阻止程序收听?
- autodesk-forge - 将 zip 文件(包含不同颜色的对象和材料文件)结果转换为单色可视项
- html - 如何修复悬停时的渐变过渡