插入到c中的动态二维数组
我正在尝试向动态2d字符数组插入一个值:插入到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 =
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> -->
...