Как я могу сделать указатель на все элементы в массиве? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь написать код на 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.Однако, когда я запускаю код здесь , я получаю следующий вывод:

my_point (dereferenced) is 2                                                                                                   
---------                                                                                                                      
Segmentation fault

Как я могу изменить my_point, чтобы он указывал на ВСЕ элементы в someNum?

1 Ответ

0 голосов
/ 30 мая 2018

Я полностью потерял себя в представлении вашего кода.Это ни в коем случае не хороший вопрос, и это может быть неправильный ответ или, может быть, он правильный, но может быть что-то не так ....

Почему вы делаете это:

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];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...