c - 访问由双指针创建的数组中的维度之外

标签 c arrays pointers

这是使用双指针定义 5*3 矩阵的正确方法吗?`

 int **M1;
 M1 = (int **)malloc(5 * sizeof(int *));
 for (i=0;i<5;i++)
 {
    M1[i] = (int *)malloc(3 * sizeof(int));
 }`

如果是这样,我如何在代码中分配M1[3][15] = 9并且仍然没有错误?为什么我在分配 M1[6][3]=2 时遇到段错误?

经过几次这样的初始化后,我明白我创建了一个 5*xx 数组,即我无法超出第 5 行,但我可以为列数分配任何值。我应该如何创建一个 5*3 数组?

最佳答案

在您的代码中,您为 5 个指针分配内存

M1 = (int **)malloc(5 * sizeof(int *));

及以后,您尝试根据 m 的不相关值进行访问超出此范围

for (i=0;i<m;i++)

m超过4时,您实际上是在访问超出边界的内存。

更好的分配方式是

int m = 5;
M1 = malloc(m * sizeof(*M1));
if (M1) 
{
 for (i=0;i<5;i++)
 {
    M1[i] = malloc(3 * sizeof(*M1[i]));
 }
}

couldn't go above 5th row but I could assign any value to the number of columns.

不,你不能。以任何可能的方式,访问越界内存都会调用 undefined behaviour .

关于c - 访问由双指针创建的数组中的维度之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31986276/

相关文章:

c - 如何使用 PSoC 5LP 芯片的 SPI 写入 SD 卡?

c - 使用指针在 argv1 中存储命令行参数时出错

c - C语言输入字符串如何加下划线

javascript - 如何缓解 Node.js 中的 Slowloris?

显示表中最后一行值的 PHP 数组

php - 在单个 PHP 函数中处理多个变量

arrays - 查询以使用 mongodb 中同一文档的另一个数组字段更新数组字段

c - 传递类型定义函数指针

c++ - 理解 argList 构造函数的问题

c++ - 当浅拷贝指针时,默认的赋值运算符是否会造成内存泄漏?