Pet*_*ter 1 c arrays memory-address
最近我在为2D数组赋值时遇到了这个问题.为了表示我的问题,我创建了小C代码.我正在使用QT创建者(社区)3.3.0和minGW 4.9.1 32位.
#include <stdio.h>
int main(void){
double m[2][2];
for (int i = 0 ; i<3; i++){
for(int j=0; j<3; j++)
printf("%p[%d][%d] ", (void*)&m[i][j],i,j);
printf("\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
作为输出我得到内存地址
0028FE98[0][0] 0028FEA0[0][1] 0028FEA8[0][2]
0028FEA8[1][0] 0028FEB0[1][1] 0028FEB8[1][2]
0028FEB8[2][0] 0028FEC0[2][1] 0028FEC8[2][2]
Run Code Online (Sandbox Code Playgroud)
您可以看到不相等的数组项具有相同的地址.因此,当我为例如[1] [2]赋值时,[2] [0]中的值也会改变.
请给我任何关于如何解决这个问题的建议.非常感谢你.
你的数组应该是3x3:
double m[3][3];
Run Code Online (Sandbox Code Playgroud)
或者你的循环应该只迭代两次,而不是三次.
您现在拥有的代码访问一些超出范围的内存,导致未定义的行为.