Проблема с ошибками сегментации в трехмерном массиве - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблемы с устранением ошибки сегментации ядра в этом коде. Он создает серию имен в трехмерном массиве со строками измерений, столбцами и символами, где символы хранят до 5 букв имени.

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

const int MAXSIZE = 11;

char*** names;
names = new char** [MAXSIZE];
cout << &names << " ";
for (int i = 0; i < MAXSIZE; ++i) {
    names[i] = new char* [MAXSIZE];
    cout << &names[i] << " ";
    for (int j = 0; j < MAXSIZE; ++j) {
        names[i][j] = new char [5];
        cout << &names[i] << " " << i << j;
    }
    cout << endl;
}   

Я тоже вставил туда некоторую отладку. Я вижу, что он может завершить назначение адресов, поэтому я не уверен, что происходит не так. Никакой другой код не выполняется, даже если в конце я удалил все файлы.

1 Ответ

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

Ваш код в порядке, но помните, что вы можете хранить только 4-символьные имена в массиве char [5]. Некоторые модификации вашего примера

const int MAXSIZE = 11;

char*** func()
{
    char*** names;
    names = new char**[MAXSIZE];
    for(int i = 0; i < MAXSIZE; ++i)
    {
        names[i] = new char*[MAXSIZE];
        for(int j = 0; j < MAXSIZE; ++j)
        {
            names[i][j] = new char[5];
            memset(names[i][j], 0, 5);
            memcpy(names[i][j], "abcd", 4); // !!! only 4 symbols for name !!!
        }
    }
    return names;
}

int main()
{
    char ***names = func();

    for(int i = 0;i < MAXSIZE;i++)
        for(int j = 0;j < MAXSIZE;j++)
            cout << names[i][j]<< endl;
// free memory
}
...