지금 2 시간 동안 디버깅을 해왔습니다. 내가 QString::toStdString
std :: string 소멸자에서 QString :: toStdString()이 충돌합니다.
QString s = "testtesttesttesttesttest";
const std::string &temp = s.toStdString();
를 호출하면 프로그램은 나중에 내가 처음에 메모리 손상을 줄 알았는데 표준 : : 문자열 소멸자
__CLR_OR_THIS_CALL ~basic_string()
{ // destroy the string
_Tidy(true); // <---- It crashes on this line.
}
에 충돌, 그러나 이것은 main()
는 만 2 개 라인을 포함되어있는 경우에도 발생합니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까? 어떻게 해결할 수 있습니까?
내 Qt 버전은 4.8.1
입니다.
사용하는 Qt는 어떤 버전 - 당신은 "> 코드 Generation-> 런타임 라이브러리 속성 -> C/C++ 구성"에 그것을 발견 할 것이다
? 참조 대신에'string temp = s.toStdString();'문자열의 복사본을 저장하면 어떻게 될까요? – RedX
같은 일이'string temp = s.toStdString();'에서 발생합니다.'toStdString()'에 의해 반환 된 임시 변수의 소멸자가 즉시 호출되기 때문에 더 일찍 발생합니다. Qt 버전을 어떻게 사용합니까? 어디서 봤어? 이 프로젝트는 다른 사람들에 의해 설정되었으므로 Qt Creator에서만 Visual Studio에서 Qt를 사용 해본 경험이 없습니다. – sashoalm
이것을 시도해보십시오 :'std :: string stdUtf8 = qs.toUtf8(). constData();' – Najzero