我已经 30 年没有使用 C 语言了。所以对于一个菜鸟问题,我深表歉意。但我不知道哪里出了问题。
我为 3x3 矩阵分配空间。
然后我想使用数组索引访问它并获取内存冲突。
double **m = (double **)malloc(3 * 3 * sizeof(double));
m[0][0] = 2; <-- exception
是我的指针算法有问题还是 VC++ 编译器中有什么新东西?如果我使用其他编译器,它的行为会有所不同吗?
编辑:我在 inet 上阅读了很多“只读内存”的评论。从什么时候开始?我可以关掉它吗?
最佳答案
您只为 m
(大小错误)分配内存,而不是 m[0]
、m[1]
和 m[2]
.
double **m = malloc(3 * sizeof(double *));
for (int i = 0; i < 3; i++)
{
m[i] = malloc(3 * sizeof(double));
}
记得在不使用时将它们全部释放。
关于C 数组指针数学。按索引访问内存冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27691195/