我尝试了不同的方法,但最终出现了错误。请给出解决方案并简要解释该概念。
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/