-2

Выдает ошибку 0xC0000005: Access violation reading location 0x072A93E2 при компиляции в конструкторе. Пробовала разные методы, но не помогает. Как исправить?

#include "pch.h"
#include <iostream>
#include <string>
#include <string.h>

using namespace std;

class Array {
private:
    string arr[5];
    int w[5] = { 0, 0, 0, 0, 0 };
public:
    Array(string arr[]) {
        this->arr[5] = arr[5];
    }
    void enter() {
        cout << "Enter the line: ";
        for (int i = 0; i < 5; i++) {
            cin >> arr[i];
        }
    }

    void sort() {
        string s1, s2;
        for (int j = 5; j > 0; j--) {
            for (int i = 0; i < 5; i++) {
                if (arr[i] > arr[i + 1]) {
                    s1 = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = s1;
                }
            }
        }
        cout << "Your array: ";
        for (int i = 0; i < 5; i++) {
            cout << arr[i] << "\t" << endl;
        }
        cout << endl << endl;
    }

    void words() {
        string ser;
        cout << "The array of amounts of words in every line: ";
        for (int i = 0; i < 5; i++) {
            ser = arr[i];
            for (int j = 0; j < ser.length(); j++)
            {
                if (isspace(ser[j]) && !isspace(ser[j + 1])) w[i]++;
            }
            w[i]++;
            cout << w[i] << "\t";
        }
        cout << endl << endl;
    }
    ~Array() {};
};

void main()
{
    string arr[5];
    Array a(arr);
    a.enter();
    a.sort();
    a.words();
}
gdcod
  • 3
  • не писать arr[5] – AR Hovsepyan May 28 '19 at 19:45
  • а как тогда? если совсем не писать скобочек (или оставить их пустыми), то уже другая ошибка:( – gdcod May 28 '19 at 19:49
  • ваш массив состоит из 5 пустых строк, вы пытаетесь инициалировать шестую(arr[5] ), а шестой у вас нет. К тому же неизвестно каким массивом окажется аргумент конструктора. Плюс ко всему, старайтесь писать код со смыслом... К тому же у вас еще другие ошибки – AR Hovsepyan May 28 '19 at 19:53
  • Нет способа скопировать весь массив разом. Используйте цикл (или std::copy, который внутри тоже использует цикл). Еще: "Выдает ошибку ... при компиляции" Не-а, при выполнении. – HolyBlackCat May 28 '19 at 19:55

1 Answers1

0

Вы выходите за пределы массива. Исправил так :

for (int j = 5; j > 0; j--) {
   for (int i = 0; i < /*5*/4; i++) {

Ещё убрал лишний код:

Array(/*string arr[]*/) {
        //this->arr[5] = arr[5];
    }

...

int/*void*/ main()
{
    //string arr[5];
    Array a/*(arr)*/;
AlexGlebe
  • 17,227