Белоногов Иван 2539
Closed this issue · 15 comments
Написал полную версию с делением и выводом в строку.
test.cpp:2:17: fatal error: gmp.h: No such file or directory
#include <gmp.h>
Если Makefile делает еще что-то, кроме требуемой библиотеки, он хотя бы падать не должен.
Исправил
Нет, всё то же самое.
Вот теперь точно должно стать лучше!
Да нет же! Я запускаю make в вашей папке, а он пытается компилировать tester.cpp и не находит gmp.h.
Строка "22-2"
не должна допускаться функцией biFromString
.
Хм. Я делаю git clone в новую папку запускаю и у меня всё работает. У меня, видимо, gmp является встроенным в g++.
Сейчас я удалил тесты, которые использовали gmp.
Исправил
Проверьте поведение biToString
в случае маленького лимита. Лимит 3 — должно быть 2 цифры и завершающий ноль.
Можно поподробней в чём проблема.
Я это тестировал. И оно работает.
s = "-12345";
bi1 = biFromString(s.c_str());
char buffer[4];
biToString(bi1, buffer, 4);
string tmp(buffer);
assert(tmp == "345");
assert не падает
Я изменил тест. Теперь не проверяется результат, а только обращения к памяти за пределами лимита с помощью mprotect(2). И у вас обращения к памяти есть.
Я проверяю с помощь флага -fsanitize=address. Он ловит такие вещи. У меня работает всё кроме теста, когда размер буфера 1, и вообще можно записать только нулевой символ.
Это исправил.
Program received signal SIGSEGV, Segmentation fault.
hw_biToString.trimmed () at asm_impl.asm:590
Там r8 в память записывается, а он 8 байт. Лимит 3 байта. Вот и выход за границы.
Спасибо, поправил
Код 7, комментарии 7.