Вернуть QString от функции - поток безопасен?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вернуть QString от функции - поток безопасен?

Сообщение Anonymous »

Я новичок в QT - но это может быть очень основной проблемой C ++. У меня есть простая функция, которая возвращает Qstring: < /p>

QString testclass::myfunc(int i)
{
QString result;
switch (i) {
case 1: result = "one"; break;
case 2: result = "two"; break;
}
return result;
}
< /code>

это безопасно? Обеспечивает ли компилятор C, возвращаемое значение остается в памяти достаточно долго, чтобы использоваться вызовой функцией? (Или этот риск повреждения памяти). Если последнее, как правильный способ вернуть QString? (Должен ли VAR, чтобы быть статическим? (Какой идентификационный случай 3 присвоенный результат случайной строке) < /p>

Что, если Myfunc - это статический метод, который я хочу вызывать из разных потоков? Придется ли мне пройти дополнительное QString, ссылаясь на то, чтобы убедиться, что каждый вызывающий вызывающий абонент получает свою собственную переменную (и вернуть void)? < /P>



< P> Вот фактическая функция (немного очищена) - и обратите внимание, что эта функция является статичной на случай, если это имеет значение: < /p>

QString L::toString(const L::editions &level)
{
QString levelStr;
switch (level) {
case L::one:
levelStr = "one";
break;
case L::two:
levelStr = "two";
break;
case L::three:
levelStr = "thre";
break;
default:
levelStr = "Internal Error";
break;
}
return levelStr;
}
< /code>

И все же Valgrind жалуется (строка 121 is 'levelstr = "one";') < /p>

34 bytes in 1 blocks are definitely lost in loss record 197 of 716
in L::toString(L::edition const&) in /mnt/lserver2/data/development/haast/src/linfo.cpp:121
1: malloc in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so
2: QArrayData::allocate(unsigned long, unsigned long, unsigned long, QFlags<QArrayData::AllocationOption>) in /opt/Qt/5.3/gcc_64/lib/libQt5Core.so.5.3.1
3: QString::QString(int, Qt::Initialization) in /opt/Qt/5.3/gcc_64/lib/libQt5Core.so.5.3.1
4: /opt/Qt/5.3/gcc_64/lib/libQt5Core.so.5.3.1
5: QString::fromUtf8_helper(char const*, int) in /opt/Qt/5.3/gcc_64/lib/libQt5Core.so.5.3.1
6: QString::fromUtf8(char const*, int) in [url=file:///opt/Qt/5.3/gcc_64/include/QtCore/qstring.h:492]/opt/Qt/5.3/gcc_64/include/QtCore/qstring.h:492[/url]
7: QString::operator=(char const*) in [url=file:///opt/Qt/5.3/gcc_64/include/QtCore/qstring.h:609]/opt/Qt/5.3/gcc_64/include/QtCore/qstring.h:609[/url]
8: L::toString(L::Lconst&) in

Подробнее здесь: https://stackoverflow.com/questions/255 ... hread-safe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»