Дефектное значение при передаче матрицы по указателю - PullRequest
0 голосов
/ 26 апреля 2019

Я использую алгоритм, в котором мне нужно скопировать 2D-матрицу в 2D-матрицу большего размера.Когда я работаю в том же главном стеке, он работает хорошо, но когда я передаю указатель скопированной матрицы другой функции, значения становятся поврежденными.

Шаги для создания проблемы: 1- Скопируйте 2D-квадратматрица размера x в другую квадратную матрицу размера y (y> x).2- Передайте указатель скопированной матрицы в функцию.3- Распечатайте матрицу внутри функции.

В результате будут искажены значения.

int main(void) {
    int tab[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int tab2[5][5];
    int size = 3;

    // Coppying tab to tab2
    for(int i = 0; i<size; i++)
    {
        for(int j = 0; j<size; j++)
        {
            tab2[i][j] = tab[i][j];
        }
    }


    // printing tab2 using myPring Function
    myPrint(tab2, size);
    return 0;
}

void myPrint (int* tab, int size)
{
    for(int i = 0; i<size; i++)
    {
        printf("|");
        for(int j = 0; j<size; j++)
        {
           printf("tab[%d][%d] => %d |", i, j,  *((tab+i*size) + j)  );
        }
        printf("\n");
    }
    printf("____________________________________________\n");
}

1 Ответ

0 голосов
/ 26 апреля 2019

*((tab+i*size) + j) вычисляет указатель, используя size, что равно трем. Однако, хотя в каждой строке tab2 было сохранено только три значения, в действительности в каждой строке содержится пять элементов.

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