C-访问二维阵列槽函数不';不行,撞车

C-访问二维阵列槽函数不';不行,撞车,c,arrays,C,Arrays,我试图用二维矩阵进行计算。为什么这会在没有错误的情况下崩溃 代码: int main(无效) { int myArray[2][3]={{1,2,3},{5,4,3}; 整数高度=2; 整数宽度=3; modifyArray((int**)myArray,高度,宽度); } 无效修改数组(整数**数组,整数高1,整数宽1) { int结果; 对于(i=0;i,(int**),强制将myArray视为指向int的指针数组 这不是它是什么-它是编译器视为二维数组的单个内存块。二维数组被编译为一维数组

我试图用二维矩阵进行计算。为什么这会在没有错误的情况下崩溃

代码:

int main(无效)
{
int myArray[2][3]={{1,2,3},{5,4,3};
整数高度=2;
整数宽度=3;
modifyArray((int**)myArray,高度,宽度);
}
无效修改数组(整数**数组,整数高1,整数宽1)
{
int结果;
对于(i=0;i,
(int**)
,强制将myArray视为指向int的指针数组


这不是它是什么-它是编译器视为二维数组的单个内存块。

二维数组被编译为一维数组 查看如何生成单个数组的程序集(元素之间的增量为4字节)


通过对int**进行重新解释(c样式转换)-正在访问的内存布局不再兼容-从而导致访问无效内存

,因为函数将传递的数组视为int
的一维数组,您的声明可以简化为这一点

#include <stdio.h>                        // <<--- include

void modifyArray(int *array, int height1, int width1)
{
    int i, j, result;                     // var declarations
    for(i=0;i<height1;i++) 
    {
        for(j=0;j<width1;j++)
        {
            result = *((array+i*3)+j);
            printf("%d ", result);        // added ;
        }
    }
}

int main (void)
{
    int myArray[2][3] = {{1,2,3},{5,4,3}};
    int height = 2;
    int width = 3;

    modifyArray( &myArray[0][0],height, width);
    return 0;
}

请同时给出您的错误/编译消息:)请发布实际编译的代码!什么是
modifyArray()
应该这样做吗?它不会修改数组。它不会给出任何错误。它只是崩溃。它应该用var结果进行一些计算。没什么了。但是它现在已经崩溃了,所以我认为给出一整段纯数学代码而不执行是没有用的。那么我怎么纠正它呢?因为只需打印en函数myArray中的轮胎数组工作正常。它正在进行实际计算,但失败了。。。
int myArray[2][3] = {{1,2,3},{5,4,3}};
000000013F6510D4  mov         dword ptr [myArray],1  
000000013F6510DC  mov         dword ptr [rsp+2Ch],2  
000000013F6510E4  mov         dword ptr [rsp+30h],3  
000000013F6510EC  mov         dword ptr [rsp+34h],5  
000000013F6510F4  mov         dword ptr [rsp+38h],4  
000000013F6510FC  mov         dword ptr [rsp+3Ch],3  
#include <stdio.h>                        // <<--- include

void modifyArray(int *array, int height1, int width1)
{
    int i, j, result;                     // var declarations
    for(i=0;i<height1;i++) 
    {
        for(j=0;j<width1;j++)
        {
            result = *((array+i*3)+j);
            printf("%d ", result);        // added ;
        }
    }
}

int main (void)
{
    int myArray[2][3] = {{1,2,3},{5,4,3}};
    int height = 2;
    int width = 3;

    modifyArray( &myArray[0][0],height, width);
    return 0;
}
*((array+i*3)+j) = result;