首页 > 解决方案 > 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[] 没有起始大小。

标签: c++codeblocks

解决方案


(0xC0000005) 错误代码表示内存访问冲突。错误消息显示 msvcrt.dll 文件中的 memcpy() 例程引起的分段错误,即使您没有明确使用该指令。类 Data 中的 todo[] 成员似乎很可疑,因为它没有分配固定大小(不了解您的编译是如何成功的,但您可能应该将其初始化为已知大小并检查)


推荐阅读