C 数组指针数学。按索引访问内存冲突

标签 c arrays visual-c++

我已经 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/

相关文章:

c - 解释一下为什么我得到 : warning assignment from incompatible pointer type

c++ - 如何使用 visual c++ 从 wireshark 读取 pcap 文件

c - 由于内置函数的类型冲突而无法执行程序

c - 卡在数组和字符串中与 strcmp c 进行比较

php mySQL,按数字检索一行,将值存储为 assoc.array

database - 如何检索表中的行数

visual-c++ - CMakeLists.txt 中的 CMake Warning (dev) : No cmake_minimum_required command is present. 一行代码如 cmake_minimum_required(VERSION 3.9)

c - 为 __uint128 数字预处理 C 十六进制字符串

c - 发送到 : Operation not permitted: netsnmp

c - 条件运算符中的这个赋值有什么问题?