diff --git a/src/polyxx/polynomial.cpp b/src/polyxx/polynomial.cpp index aa0891a..a14e0f6 100644 --- a/src/polyxx/polynomial.cpp +++ b/src/polyxx/polynomial.cpp @@ -377,7 +377,7 @@ namespace poly { std::vector psc(const Polynomial& p, const Polynomial& q) { std::size_t size = std::min(degree(p), degree(q)) + 1; - lp_polynomial_t* tmp[size]; + lp_polynomial_t **tmp = (lp_polynomial_t**)malloc(size * sizeof(lp_polynomial_t*)); for (std::size_t i = 0; i < size; ++i) { tmp[i] = lp_polynomial_new(detail::context(p, q)); } @@ -386,12 +386,13 @@ namespace poly { for (std::size_t i = 0; i < size; ++i) { res.emplace_back(tmp[i]); } + free(tmp); return res; } std::vector subres(const Polynomial& p, const Polynomial& q) { std::size_t size = std::min(degree(p), degree(q)) + 1; - lp_polynomial_t* tmp[size]; + lp_polynomial_t **tmp = (lp_polynomial_t**)malloc(size * sizeof(lp_polynomial_t*)); for (std::size_t i = 0; i < size; ++i) { tmp[i] = lp_polynomial_new(detail::context(p, q)); } @@ -400,6 +401,7 @@ namespace poly { for (std::size_t i = 0; i < size; ++i) { res.emplace_back(tmp[i]); } + free(tmp); return res; } diff --git a/src/polyxx/upolynomial.cpp b/src/polyxx/upolynomial.cpp index 90c21c1..587c76e 100644 --- a/src/polyxx/upolynomial.cpp +++ b/src/polyxx/upolynomial.cpp @@ -100,16 +100,18 @@ namespace poly { } std::vector coefficients(const UPolynomial& p) { - lp_integer_t coeffs[degree(p) + 1]; - for (std::size_t i = 0; i < degree(p) + 1; ++i) { + std::size_t size = degree(p) + 1; + lp_integer_t *coeffs = (lp_integer_t*)malloc(size * sizeof(lp_integer_t)); + for (std::size_t i = 0; i < size; ++i) { lp_integer_construct_from_int(lp_Z, &coeffs[i], 0); } lp_upolynomial_unpack(p.get_internal(), coeffs); std::vector res; - for (std::size_t i = 0; i < degree(p) + 1; ++i) { + for (std::size_t i = 0; i < size; ++i) { res.emplace_back(&coeffs[i]); lp_integer_destruct(&coeffs[i]); } + free(coeffs); return res; }