Значение элементов массива различно у вызывающего и вызываемого - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть функция, которая передает 2d массив в качестве аргумента другой функции. 2d массив передается как int **.

Функция вызова:

bool isMatch(string s, string p)
{
    int **dp;
    int* a[s.size()];
    dp = a;
    for(int i=0;i<s.size();i++)
    {
        int b[p.size()];
        dp[i] = b;
    }
    for(int i=0;i<s.size();i++)
    {
        for(int j=0;j<p.size();j++)
        {
            dp[i][j] = -1;
        }
    }
    cout<<dp[0][0]<<endl;
    return test(s,p,dp);
}

Функция вызова:

bool test(string s,string p,int **dp)
{
    cout<<dp[0][0]<<endl;
    return true;
}

Теперь, когда я печатаю дп [0] [0] в isMatch () выводится функция -1, которая является ожидаемым значением. Но когда я передаю 2d массив другой функции (т.е. test ()) и печатаю dp [0] [0], я получаю случайные значения, такие как 950192880, 337836240 и др. c. Почему происходит это событие, хотя все передается по ссылке, а стек не очищается до тех пор, пока не будет завершена функция вызова?

1 Ответ

1 голос
/ 21 апреля 2020

массив b объявлен в for l oop, поэтому он недопустим из l oop. Вы сказали, что вывод dp соответствует ожиданиям, но это случайно. Вы должны выделить b используя new.

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