数组

时间:2019-12-18 11:31:07

标签: c++ arrays mfc

所以我有一个程序,该程序可以帮助我按邻接矩阵在图形中查找循环。除了输出,我已经做了一切。

实现

因此,在单击示例按钮时,从蒙版的编辑控件中,取一个最大为99的数字以构成某些数组的大小。然后,我创建2d数组** arr,以零填充它,然后通过for填充正常编辑控件中编写的文本信息。完成此步骤后,我用该数组中的边填充向量,并对该图进行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;
    }
}

在下一个过程中(从编辑控件中获取邻接矩阵)出现警告#1:

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++;
}

Warning C6386 Buffer overrun while writing to 'arr[i]': the writable size is 'x*4' bytes, but '8' bytes might be written.

在输出之前,我还放入了另一个向量循环,并且它还发出警告#2:

for (int i = 1; i <= edges; i++) {
        if (mark[i] != 0) {
        int k = mark[i];
        cycles[k].push_back(i);
    }
}

Warning C6385 Reading invalid data from 'mark': the readable size is 'x*4' bytes, but '8' bytes may be read.

问题是,当我测试输出(邻接矩阵7x7,全部填充为1)时,它捕获到这2个部分的异常,这是警告。例外是:Exception thrown at 0x00007FF6DD63AD7A in CTabControl.exe: 0xC0000005: Access violation writing location 0x00000000FDFDFDFD.

我尝试过的事情

现在,我尝试使用make_unique指针作为标记上的*指针的替代形式,该指针以前是这样声明的:int *mark = new int[x];(更改为auto mark = make_unique<int[]>(x);)。更改后,出现一个新错误:     E0413 no suitable conversion function from "std::unique_ptr<int [], std::default_delete<int []>>" to "int *" exists

它指出了该函数,其中我使用了标记数组:dfs_cycle(1, 0, color, mark, par, cyclenumber);

函数声明如下:

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++;
}

当我尝试将arr设为2d向量时,我偶然发现“超出范围”错误。因此,这意味着我必须以某种方式标记我的文本并将其放入数组中。我还不知道怎么办。

0 个答案:

没有答案