मुझे प्रारंभिक-सूची में 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
कुछ लगता है कॉपी असाइनमेंट के साथ गलत होने के लिए i एन कक्षाए :: समारोह() लेकिन मुझे यकीन नहीं है कि यह क्या है। जब मैं
function(const Parameter& pars);
को समारोह के हस्ताक्षर बदल यह या तो दुर्घटना नहीं है।
क्या आपके पास कोई विचार है?
ऐसा लगता है कि यह क्रैश होना चाहिए ... और यह मुझ पर क्रैश नहीं हुआ (Qt5.3, gcc4.8.2, कुबंटू 32-बिट)। क्यूटी, ओएस, आदि का क्या कंपाइलर संस्करण? – HostileFork
विंडोज 7 64 बिट, विजुअल स्टूडियो 2013 अपडेट 2 के साथ, क्यूटी 5.1.1 – Knitschi
यदि आप 'QString' को' std :: string' में बदलते हैं तो यह काम करता है? – cmannett85