Corrupção de pilha ao retornar da função dentro de uma dll
Eu tenho uma função com um protótipo como o seguinte:
void function(std::string str);
Esta função é chamada na minha função principal em outro programa que carrega e usa essa dll.
function("some string value here");
Ao retornar desta função, recebo um erro de corrupção de heap:
O Windows desencadeou um ponto de interrupção no program.exe.
Isso pode ser devido a uma corrupção do heap, que indica um bug no program.exe ou qualquer uma das DLLs que ele carregou.
Isso também pode ser devido ao usuário pressionar F12 enquanto o program.exe está em foco.
A janela de saída pode ter mais informações de diagnóstico.
Brincando com meu código notei algumas observações estranhas:
1. Quando o comprimento da string passada é menor do que 11 caracteres eu não recebo nenhum erro, assim que eu adiciono mais caracteres o erro aparece.
2. Ao alterar o tipo de parâmetro destd::string
parastd::string&
o erro desaparece. A ideia de passar referência veio deAqui.
3. Comentei o corpo da função. As operações lá não têm nada a ver com a exceção produzida.
4. Alterar o tipo de parâmetro destd::string
parachar*
também resolve o problema.
O que poderia estar causando esse erro? Como eu resolvo isso?