Мне непонятно, почему это должно потерпеть неудачу, и почему это терпит неудачу, где это происходит:
std::string* s;
s = (std::string*)malloc(sizeof(std::string) * 10);
s[0] = "string0";
s[1] = "string1";
s[2] = "string2"; //Segmentation fault
Неважно, каков размер строк, назначенных s [0] - s [2], или сколько места занято malloc'ом. То же самое происходит с QStrings. Я предполагаю, что проблема возникает из-за того, что std :: string содержит внутренний указатель, поэтому sizeof () просто возвращает размер указателя, но, учитывая, что std :: strings ведут себя как значения в противном случае (=, == и т. Д. ) Я не понимаю, почему это влечет за собой неудачу здесь.
Кроме того, для совместимости с другим кодом мне нужно использовать здесь массивы C, а не, например. станд :: вектор. И я ищу общее решение (которое будет работать с QString, QDateTime и т. Д.), Если оно есть. Но я был бы рад узнать, что происходит.
Редактировать: Пониженное голосование ... Что не так с этим вопросом? Сначала я какое-то время оглядывался по сторонам (включая SO), но не нашел этого адреса.