Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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_Memory Management_Dynamic Arrays - Fatal编程技术网

插入到c中的动态二维数组

插入到c中的动态二维数组,c,memory-management,dynamic-arrays,C,Memory Management,Dynamic Arrays,我正在尝试向动态2d字符数组插入一个值: theBoard->_board[row][col] = val; 但是在每个字符赋值给(行,列)的时候,它也会把它放在(行-1,列+8)上。 有什么问题吗 以下是阵列的分配: if ((new = (BoardP) malloc(sizeof(struct Board))) == NULL) { reportError(MEM_OUT); return NULL; } if ((new->_board =

我正在尝试向动态2d字符数组插入一个值:

    theBoard->_board[row][col] = val;
但是在每个字符赋值给(行,列)的时候,它也会把它放在(行-1,列+8)上。 有什么问题吗

以下是阵列的分配:

    if ((new = (BoardP) malloc(sizeof(struct Board))) == NULL)
{
    reportError(MEM_OUT);
    return NULL;
}
if ((new->_board = (char**) malloc(rows * sizeof(char*))) == NULL)
{
    reportError(MEM_OUT);
    return NULL;
}
int i,j;
for (i=0;i<rows;i++)
{
    if ((new->_board[i] = (char*) malloc(cols * sizeof(char))) == NULL)
    {
        reportError(MEM_OUT);
        return NULL;
    }
我得到这个输出:

     0  1  2  3  4  5  6  7  8  9
0                                
1                            X   
2    X                           
3                                
4                                
5                                
6                                
7                                
8                                
9                                

你的董事会可能只有8列。如果访问第8+列,则将读取(或写入)内存中的下一行内容,除最后一行外,其他所有行都是下一行

 <0,1> <0,2> <0,3> <0,4> <0,5> <0,6> <0,7>  --> 
 <1,0> <1,2> <1,3> <1,4> <1,5> <1,6> <1,7>  -->
 ...
-->
-->
...

<>代码>即使你正在编码C,也请避免使用C++中的“保留”关键字“新”。另外,分配后是否初始化内存(以避免读取垃圾)?首先:不要强制转换
malloc
的结果是的,我正在初始化数组。分配接缝良好,向我们显示插入代码、值或行和列等。我同意,分配是相当标准的。基本上,电路板初始化为10X10。当我在(2,0)中插入一个“X”时,它也会出现在(1,8)中。例如,如果你在(2,0)中插入一个“a”,你可以使用来访问它。这里有一个简单的数组算法,像这样,a[1][7]会像(a+1)。8+7=>a[0][15]会是(a+0)。8+15最后都一样。你真的确定
cols
是10而不是8吗?因为cols的值介于5和8之间是您看到的行为的最可能的解释。@Klaslindbkäck行和cols都是10,我对此进行了三次检查。我尝试了您的代码,它对我来说运行良好(cols=10)。在分配行之前,请尝试打印
cols
,以确保行没有更改。
 <0,1> <0,2> <0,3> <0,4> <0,5> <0,6> <0,7>  --> 
 <1,0> <1,2> <1,3> <1,4> <1,5> <1,6> <1,7>  -->
 ...