strncpy символьная строка проблема при удалении массива - PullRequest
0 голосов
/ 13 ноября 2018

Не знаю, проблема с этой ошибкой. Тем не менее, я думаю, что я должен удалить uName[], прежде чем удалить []cpp. Как я могу сделать для этого?

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string.h>

using namespace std;
class cppUr
{
public:
    void writeName(char nm[]);
    char * readName();

private:
    char uName[80];
};
void cppUr::writeName(char nm[])
{
    strncpy(uName, nm, 79);
}
char * cppUr::readName()
{
    return uName;
}

Основное:

int main()
{
    char name0[100];
    char name1[100];
    char name2[100];
    char name3[100];
    cppUr *cpp = new cppUr[3];
    cout << "Input first name: "<<endl;
    cin.getline(name0, 100);
    cpp[0].writeName(name0);
    cout << "Input second name: " << endl;
    cin.getline(name1, 100);
    cpp[1].writeName(name1);
    cout << "Input third name: " << endl;
    cin.getline(name2, 100);
    cpp[2].writeName(name2);
    cout << "Input fourth name: " << endl;
    cin.getline(name3, 100);
    cpp[3].writeName(name3);
    for (int i = 0; i < 4; i++)
    {
        cpp[i].readName();
        cout << "The "<<i<<" name " << cpp[i].readName() << endl;
    }
    delete[] cpp;
    system("PAUSE");
    return 0;
}

Ошибка:

ОБНАРУЖЕНА КОРРУПЦИЯ КАРТЫ: после блока Normal (# 148) в 0x0059E1E0. CRT обнаружил, что приложение записало в память после завершения буфера кучи

1 Ответ

0 голосов
/ 13 ноября 2018

Ошибка очень проста.

Вы создаете массив из ccpUr с 3 элементами, но после использования 4 из них.

OfКонечно, C ++ является индексным языком, основанным на нуле, но это означает, что последний не может использоваться.Вот почему в вашем условии цикла должно использоваться то же число, что и в распределении массива, которое является 3 .

Подумайте об этом, когда [3] достаточно для 4 элемента, тогда[2] достаточно для 3 элементов, тогда [1] достаточно для 2 элементов, а [0] достаточно для 1 элемента?Ты чувствуешь это?Массив нулевого размера ни для чего не достаточно.

regards

...