C++ &引用;可读大小为';x*4,但8';字节可以被写入/读取;使用数组

C++ &引用;可读大小为';x*4,但8';字节可以被写入/读取;使用数组,c++,arrays,mfc,C++,Arrays,Mfc,所以我有一个程序,它可以帮助我通过邻接矩阵在图中找到一个圈。除了输出,我什么都做了 实现 因此,在单击“执行”按钮时,从蒙版编辑控件中选择一个最大为99的数字,以生成某些数组的大小。然后我创建2d数组**arr,用零填充它,然后通过via从普通编辑控件中写入的文本填充信息。在这一步之后,我用该数组的边填充向量,并对该图执行DFS 现在关于问题 就像我说的,我有2d数组。用零填充的整个过程: int **arr; arr = new int* [x]; for (int i = 0; i <

所以我有一个程序,它可以帮助我通过邻接矩阵在图中找到一个圈。除了输出,我什么都做了

实现

因此,在单击“执行”按钮时,从蒙版编辑控件中选择一个最大为99的数字,以生成某些数组的大小。然后我创建2d数组**arr,用零填充它,然后通过via从普通编辑控件中写入的文本填充信息。在这一步之后,我用该数组的边填充向量,并对该图执行DFS

现在关于问题

就像我说的,我有2d数组。用零填充的整个过程:

int **arr;
arr = new int* [x];
for (int i = 0; i < x; i++)
{
    arr[i] = new int[x];
}

for (int i = 0; i < x; i++)
{
    for (int j = 0; j < x; j++)
    {
        arr[i][j] = 0;
    }
}
写入“arr[i]”时警告C6386缓冲区溢出:可写大小为“x*4”字节,但可能会写入“8”字节。

在输出之前,我还加入了另一个向量循环,它还有警告#2:

我能在这里做些什么来解决这个问题

编辑

我想我找到了问题所在,但现在我找不到解决办法。所以,当文本从文本框中读取时,邻接矩阵是,我用标记化文本的内容填充数组。我是这样做的:

int i = 0, j; int lpos = 0;
for (CString line = s.Tokenize(_T("\r\n"), lpos); lpos > 0; line = s.Tokenize(_T("\r\n"), lpos)){   
        j = 0;
        int cpos = 0;
        for (CString cell = line.Tokenize(_T(" "), cpos); cpos > 0; cell = line.Tokenize(_T(" "), cpos))
        {       
            int num;
            num = _wtoi(cell);
            arr[i][j] = num;
            j++;
        }
        i++;
}

当我试图使arr成为2d向量时,我偶然发现了“超出范围”的错误。所以,这意味着我必须以某种方式标记我的文本并将其放入数组中。我还没有弄明白是怎么回事。

运行代码时,
x
的值是零还是一?这就是警告所暗示的。如果是这种情况,则将所有
新操作中的大小从
[x]
更改为
[max(2,x)]
。此处不会更改任何内容。但值得注意的是,图不能用只有一个顶点的邻接矩阵来表示。但是当循环存在时,错误本身就会出现。您已经显示了代码的某些部分,但不清楚您在做什么。请尽可能少地举例说明可以编译并再现错误和警告。并说明所需的行为。还考虑使用二维矢量与<代码> STD::矢量VEC;<代码>,您可以将向量(通过引用)传递给另一个函数。我想我已经确定了有问题的地方。我将在我的主线程中编辑一些。
for (int i = 1; i <= edges; i++) {
        if (mark[i] != 0) {
        int k = mark[i];
        cycles[k].push_back(i);
    }
}
void dfs_cycle(int u, int p, int color[], int mark[], int par[], int& cyclenumber)
{
 // ........
}
int i = 0, j; int lpos = 0;
for (CString line = s.Tokenize(_T("\r\n"), lpos); lpos > 0; line = s.Tokenize(_T("\r\n"), lpos)){   
        j = 0;
        int cpos = 0;
        for (CString cell = line.Tokenize(_T(" "), cpos); cpos > 0; cell = line.Tokenize(_T(" "), cpos))
        {       
            int num;
            num = _wtoi(cell);
            arr[i][j] = num;
            j++;
        }
        i++;
}