@ITeration_Test

Что происходит с string при передаче ссылки строки в структуру, почему может крашится?

Не передавая данные в структуру - работает. Иначе, нет.
typedef struct{
      std::string url;
    }OBJECT;

OBJECT object;

void init_obj(OBJECT* obj,  std::string _url)
{
	obj->url = _url;
}
init_obj(&object, "0.png"); //Ссылка на текстуру.
// SFML
sf::Texture texture;
texture.loadFromFile(obj->url);  //  void draw(OBJECT* obj)
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
brick = (OBJECT*)realloc(brick, sizeof(*brick) * brickLength);


Вот этот код вызывает ошибку. Вы выделяете стурктуру OBJECT через realloc. Но она не POD (plain old data) - там поле url - объект std::string. А объекты нельзя вот так выделять. Надо чтобы обязательно конструктор отработал. Вообще, конечно, есть способ извратиться и вызвать конструктор руками, но это костыль.

Вы тут намешали вещи из C++ (объекты) и вещи из C (malloc) - и это все вместе не работает.

Правильное решение будет создавть объект через new:
brick = new Object[brickLength];

Не забудьте только в конце отчистить это все через delete[].

А еще лучше, используйте std::vector<Object>.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы