crtls Действительный указатель кучи (блок) в моем классе заголовка - PullRequest
0 голосов
/ 08 января 2019

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

int sumArray(int* arr, unsigned r) {

    r++;
    int *secArr = new int[r];
    for (int i = 0; i<r - 1; i++)   
    {
        secArr[i] = arr[i];  
    }

    secArr[r - 1] = sum % r;

    delete[] arr;

    arr = new int[r];


    for (size_t i = 0; i < r - 1; i++)
    {
        arr[i] = secArr[i];
    }
    delete[] secArr;        

    return 0;
}

1 Ответ

0 голосов
/ 08 января 2019

C ++ использует передачу по значению, если вы явно не используете ссылки. Теперь int* arr является указателем, и этот указатель здесь передается по значению. Это означает, что вы получаете копию указателя, но не указательных элементов. Таким образом, вы можете обновить arr[0], но не arr.

Сказав это, не используйте указатели, подобные этому. Используйте std::vector<int>& arr.

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