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?

questionAnswers(3)

yourAnswerToTheQuestion