«Стек вокруг переменной поврежден». Как определить размер массива? - PullRequest
0 голосов
/ 22 апреля 2019

Я должен написать простую программу, которая позволит пользователю вводить свою фамилию в программу. Программа выведет их фамилию на экран. Однако, когда я запускаю программу, я вижу ошибку «Стек вокруг последней поврежденной переменной». К счастью, это очень короткая программа, но я все еще не понимаю, что именно вызывает проблему.

Я попытался изменить размер массива от количества элементов в нем до количества байтов в нем. Я пытался это сделать, поскольку массив состоит из символов, а не целых чисел.

Назначение утверждает, что введенный массив не может быть больше 10 (состоит из 9 символов). Вот почему присутствует глобальная переменная "MAX".

#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
using namespace std;

const int MAX = 10;

int main()
{ 
    char last[MAX];
    int size = 0;

    cout << "Enter you last name with no more than 9 characters: "
             << endl;
    cin >> last[MAX];

    size = sizeof(last);

    cout << "This is your last name: " << endl;
    cin >> last;

    return 0;
}

Ответы [ 2 ]

4 голосов
/ 22 апреля 2019
char last[MAX];
cin >> last[MAX];

Массив имеет элемент MAX, а индекс начинается с 0. Это означает, что последний элемент имеет индекс MAX-1;

Стек вокруг последней переменной был поврежден

Это потому, что вы обращаетесь к last[MAX], который превышает выделенную память для массива.

Это должно быть

cin >> last;
0 голосов
/ 22 апреля 2019
cin >> last[MAX];

должно быть

cin >> last;

, но еще лучше использовать std::string вместо массива char.

last[MAX] делает вне привязанного доступа (и позволит получить только один символ)

...