c - 返回有错误的二维数组,需要概念

标签 c multidimensional-array

我尝试了不同的方法,但最终出现了错误。请给出解决方案并简要解释该概念。

uint8_t **subBytes()
{
    int i,j;
    uint8_t r,c;
    uint8_t t[4][4];

    for(i=0;i<4;i++)
    {
        for (j=0;j<4;j++)
        {
            r = pt[p1][j] & 0xf0;
            r = r >> 4;
            c = pt[p1][j] & 0x0f;
            t[i][j] = (uint8_t *) malloc(sizeof(uint8_t));
            t[i][j] = sBox[r][c];
        }
        p1++;
    }
    return t;
}

int main()
{
    uint8_t **temp;
    temp = subBytes();
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%x  ", temp[i][j]);
        }
        printf("\n");
    }
}

这是我原来的代码。在这里,我使用了 malloc,但它也不起作用。

最佳答案

为矩阵分配的内存空间是本地变量。 局部变量的作用域仅在该函数内。

当您返回时,它会被丢弃。

在您的代码中,它是uint8_t t[4][4]

t 在 return t 后立即被丢弃。

因此您不会返回任何内容,并且可能会导致未定义的行为。

您应该使用 malloc 为矩阵分配内存,而不仅仅是在本地声明它。

在代码中

uint8_t **t.

t = malloc(sizeof(uint8_t) * 16 )  //size of a  4x4 matrix

然后将t作为二维数组并返回t.like

t[0][0] = 1;

在函数之外使用它后不要忘记释放它。

free(t);

关于c - 返回有错误的二维数组,需要概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21225904/

相关文章:

java - 如何通过次对角线遍历二维数组?

c++ - 速度增益 : Converting 2D array to 1D array

c - 为什么局部常量变量不进入 .rodata 部分?

c - 只保留重复模式的最后一行

c - 数组地址 - 有和号和没有和号的区别

c++ - 在 C++ 中的 #pragma 注释之前搜索可用的库?

java - 将数组存储在二维数组Java中

java - 二维数组初始化错误

json - 显示 JSON 数组数据时出错 - 无法将复杂对象类型转换为简单值

c - C中密码中的字符数