我正在尝试编写一个C代码,其中指针可以指向数组中的所有元素。但是,在我取消引用指针后,我得到Segmentation Fault
错误。
我的代码如下:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
void func_equal(int32_t *input, uint8_t *output)
{
for (int i= 0; i < 4; i++)
{
output[i]= input[i];
}
}
int main()
{
uint8_t* my_point;
int32_t someNum[4];
for (int i= 0; i < 4; i++)
{
someNum[i]= 2 + (4*i);
}
func_equal(someNum, my_point);
printf("my_point (dereferenced) is %d\n", *(my_point));
printf("---------\n");
for (int i= 0 ; i < 4; i++)
{
printf("my_point (dereferenced) is %d\n", *(my_point+i));
}
return 0;
}
正如我在代码中看到的,我创建了一个名为my_point
的指针,我想让它指向数组someNum
。但是,当我运行代码here时,我得到以下输出:
my_point (dereferenced) is 2
---------
Segmentation fault
如何修改my_point
以指向someNum
中的所有元素?
答案 0 :(得分:2)
我完全迷失在代码的演示中。这绝不是一个好问题,这可能不是正确答案,也可能是正确的,但可能有更多错误......
为什么这样做:
YCbCr_MCU[0]= &(color[x].YCbCr_MCU[0]);
YCbCr_MCU[1]= &(color[x].YCbCr_MCU[1]);
YCbCr_MCU[2]= &(color[x].YCbCr_MCU[2]);
这看起来像数组中的三个指针指向数组中排序的变量。为此,只需一个指针即可。
uint8_t *YCbCr_MCU = &(color[x].YCbCr_MCU[0])
从这一点开始,您可以通过指针访问所有成员,这些条件将成立:
YCbCr_MCU[0] == color[x].YCbCr_MCU[0];
YCbCr_MCU[1] == color[x].YCbCr_MCU[1];
YCbCr_MCU[2] == color[x].YCbCr_MCU[2];
这样可以更轻松地使用代码。
真正的问题似乎在这里:
uint8_t *MCU_Y = YCbCr_MCU[0]; // here YCbCr_MCU[0] is a pointer so this is valid.
....
index = i * (8 * nb_MCU_H) + j;
R = (MCU_Cr[index] - 128) * 1.402f + MCU_Y[index]; // look at the MCU_Y here
对于0
以外的每个索引,这都是无效的(可以更精确1
而2
可以获得color[x].YCbCr_MCU[1];
或color[x].YCbCr_MCU[1];
< / p>