내가 이해하지 못하는 초기화 목록에서 QString을 사용할 때 액세스 위반이 발생했습니다.초기화 목록의 QString에서 액세스 위반이 발생합니다. 여기서 뭐가 잘못 됐니?
다음은 문제를 재현하는 최소한의 예입니다.
// file ClassA.h
#pragma once
#include <QString>
struct Parameter
{
QString stringPar;
};
class ClassA
{
QString m_string1;
public:
void function(Parameter pars);
};
를 ClassA의 구현 ...
// file ClassA.cpp
#include "ClassA.h"
void ClassA::function(Parameter pars)
{
m_string1 = pars.stringPar; // last line called in my code when the crash happens
}
및 MAIN.CPP
// file main.cpp
#include "ClassA.h"
int main()
{
ClassA classA;
classA.function({ QString("jkjsdghdkjhgdjufgskhdbfgskzh") });
// when using this code the problem does not occur
//Parameter par = { QString("jkjsdghdkjhgdjufgskhdbfgskzh") };
//classA.function(par);
return 0;
}
위반시 호출 스택 :
Qt5Cored.dll!QGenericAtomicOps<QAtomicOpsBySize<4> >::load<long>(const long & _q_value) Line 96
Qt5Cored.dll!QBasicAtomicInteger<int>::load() Line 142
Qt5Cored.dll!QtPrivate::RefCount::ref() Line 57
Qt5Cored.dll!QString::operator=(const QString & other) Line 1355
EducationalCode.exe!ClassA::function(Parameter pars) Line 6
EducationalCode.exe!main() Line 8
뭔가가 보인다 카피 과제에 잘못 가고 싶다. n ClassA :: function() 그러나 그것이 무엇인지는 잘 모르겠습니다. 내가
function(const Parameter& pars);
에 함수의 서명을 변경하면 이 중 충돌하지 않습니다.
의견이 있으십니까?
충돌이 발생하지 않는 것처럼 보입니다 ... (Qt5.3, gcc4.8.2, kubuntu 32-bit) 충돌이 없었습니다. 컴파일러, Qt, OS 등의 버전은 무엇입니까? – HostileFork
Windows 7 64 비트, 업데이트 2, Qt 5.1.1이 포함 된 Visual Studio 2013 – Knitschi
'QString'을'std :: string'으로 변경하면 작동합니까? – cmannett85