Проект Rust внезапно терпит неудачу в Windows - для среза::from_raw_parts требуется, чтобы указатель был выровнен и не был нулевым

Я думаю, что это что-то с SDK, потому что это тот же код, который раньше работал нормально. Он по-прежнему отлично работает в Linux.

Ошибка:

thread 'tokio-runtime-worker' panicked at library\core\src\panicking.rs:220:5:
unsafe precondition(s) violated: slice::from_raw_parts requires the pointer to be aligned and non-null, and the total size of the slice not to exceed `isize::MAX`

Как минимум просмотрите/включите трассировку стека, чтобы определить, какой код (ошибочно) вызывает slice::from_raw_parts.

eggyal 20.05.2024 03:05

Эта ошибка новая, но это означает, что до этого код полагался на неопределенное поведение, от которого теперь вас защищает ошибка. Это исходит из вашего кода или библиотеки?

kmdreko 20.05.2024 03:38

Ни один. Пожалуйста, смотрите ответ ниже от Mac.

SpaceMonkey 21.05.2024 12:05

Чтобы уточнить: вы должны, нет, вы должны это исправить. Запуск в режиме выпуска устраняет только симптомы, а не проблему.

Chayim Friedman 24.05.2024 03:34

@eggyal эй, ты прав. В итоге очистка и восстановление решили проблему. Это было как-то связано с ящиком с вольфрамитом в Windows. Я попробовал обновить его, и оно сработало, понизил версию и обязательно очистил/пересобрал, и все равно работало, так что я думаю, что это какая-то странная ошибка. Я также позаботился о том, чтобы понизить версию Rusc до стабильной версии (а не бета-версии).

SpaceMonkey 15.07.2024 15:26
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
5
499
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Недавнее изменение стандартной библиотеки позволило активировать утверждения отладки в core/std, если пользователь компилирует в режиме отладки, даже если предварительно скомпилированная стандартная библиотека скомпилирована в режиме выпуска. См. раздел Утверждение небезопасных предварительных условий примечаний к выпуску Rust 1.78.0.

Это признак того, что до изменения в вашем коде или зависимости была UB, и теперь она обнаруживается, поскольку утверждение только сейчас компилируется.

Большое спасибо. Удаление точек останова работает, а также запуск Release. Как вы это поняли?

SpaceMonkey 21.05.2024 12:04

Что вы подразумеваете под УБ?

SpaceMonkey 21.05.2024 15:38

@SpaceMonkey UB — это неопределенное поведение.

Mac O'Brien 22.05.2024 13:48

Для тех, кто столкнется с этой проблемой в будущем. Попробуй:

  • Убедитесь, что вы используете стабильную версию Rusc, а не бета-версию.
  • cargo clean и cargo build
  • Обновите ящик с вольфрамитом до последней версии. Возможно, тоже нужно обновить reqwest.

Я не могу точно определить проблему, но это был один из этих шагов, который ее устранил. Код, который дал сбой, находился в коде функции tungstenite::connect.

Другие вопросы по теме