Почему конечное рекурсивное поведение вызывает крэ sh? (free (): неверный указатель) - PullRequest
0 голосов
/ 08 марта 2020

Ниже приведен мой код, просто функция с именем kk, которая будет рекурсивно вызываться 10 раз, поэтому невозможно вызвать переполнение стека, но происходит сбой с

Ошибка в `./3 ': free ( ): неверный указатель: 0x0000000000602100

Кто знает причину ??

string kk(string &s)
{
    static  int i=0;
    s+="q";
    i++;
    cout<<"i="<<i<<endl;
    if(i>=10) return s;
    kk(s);
}

int main()
{
    string s="wer";

    cout<<"s="<<kk(s)<<endl;
}

1 Ответ

0 голосов
/ 09 марта 2020

C26444 NO_UNNAMED_RAII_OBJECTS это вызывало проблему. При каждом возврате временный объект создавался и удалялся.

Изменял код, как показано ниже:

#include <iostream>
#include <cstdlib>

static  int i = 0;

void kk(std::string& s)
{

    s += "q";
    i++;
    std::cout << "i=" << i << std::endl;
    if (i >= 10) return ;
    kk(s);
}

int main()
{
    std::string s = "wer";
    kk(s);
    std::cout << "s=" << s << std::endl;
}

Вывод:

i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 i = 10 s = werqqqqqqqqqq

...