Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符读取到矩阵时出错_C++ - Fatal编程技术网

C++ 将字符读取到矩阵时出错

C++ 将字符读取到矩阵时出错,c++,C++,我正试图将文件中的文本读入字符矩阵 我是这样做的: char** crearMundo() { ifstream input("C:\\Users\\JhonAlx\\Desktop\\file.txt"); input >> filas; input >> columnas; filas += 2; columnas += 2; char** laberinto = crearMatriz(fila

我正试图将文件中的文本读入字符矩阵

我是这样做的:

 char** crearMundo() 
 {
     ifstream input("C:\\Users\\JhonAlx\\Desktop\\file.txt");

     input >> filas;
     input >> columnas;

     filas += 2;
     columnas += 2;

     char** laberinto = crearMatriz(filas, columnas);

     //Initial fill
     for(int i = 0; i < filas; i++)
     {
         for(int j = 0; j < columnas; j++)
         {
             laberinto[i][j] = ' ';
         }
     }

     //Next two loops will fill only borders
     for(int i = 0; i < filas; i++)
     {
         laberinto[0][i] = '?';
         laberinto[filas - 1][i] = '?';
     }

     for(int i = 0; i < columnas; i++)
     {
         laberinto[i][0] = '?'; //VS throws error in this line
         laberinto[i][columnas - 1] = '?';
     }

     //Fill actual content of file, omitting borders
     for(int i = 1; i < filas - 1; i++)
     {
         for(int j = 1; j < columnas - 1; j++)
         {
             input >> laberinto[i][j];
         }
     }

     return laberinto; 
}
今天早上我对它进行编程时,一切正常,但现在它抛出了以下错误:

访问冲突读取位置0xfdfdfd

使用VS2012进行调试并使用本地资源管理器查看,我在ifstream变量上获得以下文本:

输入{\u Filebuffer={\u Set\u eback=0xCCCC< 读取的字符时出错 字符串。> _Set_egptr=0xCCCC< 读取字符串的字符时出错。> ...} }标准::基本\u ifstream>


欢迎提供任何帮助。

替代方法-将文件读入字符串,然后使用c_str获取字符数组。 例如:


在第一组和最后一组循环(双嵌套循环)中,索引限制是针对filas然后是columnas设置的。然而,中间两种划定边界的方法是不同的,可能是错误的。请注意4个连续循环使用的索引:

laberinto[0..filas-1][0..columnas-1]    -- fill with ' ' (ok: filas, then columnas)
laberinto[0,filas-1][0..filas-1]        -- first borders (bad: filas, then filas)
laberinto[0..columnas-1][0,columnas-1]  -- second borders(bad: columnas, then columnas)
laberinto[0..filas-2][0..columnas-2]    -- read from file(ok: filas, then columnas)

错误的可能原因是由于在边界循环中使用了错误的索引而超出了数组边界;可能的解决办法是纠正这个问题。

Mmmm,我不明白为什么第二个循环不好,请您再解释一下,好吗?虽然我只是用filas和columnas的一些固定值测试了我的代码,但我再次得到了错误:只是用forint I=0修复了它;icolumnas,则应该得到一个超出范围的错误。另外,在第三个循环中,第一个索引的范围为0..columnas-1,因此如果columnas>filas,它还应该得到一个超出范围的错误。
laberinto[0..filas-1][0..columnas-1]    -- fill with ' ' (ok: filas, then columnas)
laberinto[0,filas-1][0..filas-1]        -- first borders (bad: filas, then filas)
laberinto[0..columnas-1][0,columnas-1]  -- second borders(bad: columnas, then columnas)
laberinto[0..filas-2][0..columnas-2]    -- read from file(ok: filas, then columnas)