Ich habe eine Zugriffsverletzung festgestellt, wenn ich einen QString in einer Initialisierungsliste verwende, die ich nicht verstehe.QString in der Initialisierungsliste verursacht Zugriffsverletzung. Was läuft hier falsch?
Hier ist ein minimales Beispiel, das das Problem reproduziert.
// file ClassA.h
#pragma once
#include <QString>
struct Parameter
{
QString stringPar;
};
class ClassA
{
QString m_string1;
public:
void function(Parameter pars);
};
Implementierung von KlasseA ...
// 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
}
und 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;
}
Der Call-Stack zum Zeitpunkt der Verletzung:
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
Etwas scheint mit der Kopieraufgabe falsch zu gehen i n ClassA :: function(), aber ich bin mir nicht sicher, was es ist. Wenn ich die Unterschrift Funktion
function(const Parameter& pars);
es nicht abstürzt entweder ändern.
Haben Sie eine Idee?
Sieht nicht ... abstürzen sollte und es nicht auf mich hat abstürzen (Qt5.3, gcc4.8.2, kubuntu 32-bit). Welcher Compiler, welche Version von Qt, OS usw.? – HostileFork
Windows 7 64 Bit, Visual Studio 2013 mit Update 2, Qt 5.1.1 – Knitschi
Wenn Sie 'QString' in' std :: string' ändern, funktioniert das? – cmannett85