3D阵列中的分割错误问题

时间:2018-11-15 03:10:25

标签: c++ pointers multidimensional-array dynamic-memory-allocation

我无法摆脱此代码的核心分段错误。它会在3维数组中创建一系列名称,其中包含维度行,列和字符,其中字符最多可存储一个名称的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 :(得分:0)

您的代码还可以,但是请记住,您只能在char [5]数组中存储4个符号的名称。 您的示例的一些修改

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
}