From 81eeb3281f299914b8a0e8c7482cc76f16b1d098 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Tue, 31 Oct 2023 00:04:16 +0800 Subject: [PATCH] fix: memory error --- data/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- src/int2048.cpp | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index 78cb5b2..52a7d52 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -1,6 +1,6 @@ set(PROJECT_NAME ${CMAKE_PROJECT_NAME}) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_FLAGS "-g") +set(CMAKE_CXX_FLAGS " -g") set(ENV{MAKEFLAGS} "-j16") include_directories(${PROJECT_SOURCE_DIR}/include) link_directories(${PROJECT_SOURCE_DIR}/src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ef0718e..42a6013 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,5 @@ set(PROJECT_NAME ${CMAKE_PROJECT_NAME}) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_FLAGS "-g") +set(CMAKE_CXX_FLAGS " -g") include_directories(${PROJECT_SOURCE_DIR}/include) add_library(int2048 STATIC int2048.cpp) \ No newline at end of file diff --git a/src/int2048.cpp b/src/int2048.cpp index 7f7e0dd..bb64e99 100644 --- a/src/int2048.cpp +++ b/src/int2048.cpp @@ -176,7 +176,7 @@ inline void UnsignedAdd(int2048 &A, const int2048 *const pB) { i++) { if (i < (pB->num_length + int2048::kNum - 1) / int2048::kNum) A.val[i] += pB->val[i]; - A.val[i + 1] += A.val[i] / int2048::kMod; + if (i + 1 < A.buf_length) A.val[i + 1] += A.val[i] / int2048::kMod; A.val[i] %= int2048::kMod; } A.num_length = std::max(A.num_length, pB->num_length); @@ -473,19 +473,19 @@ void int2048::RightMoveBy(int L) { } int big_move = L / int2048::kNum; int small_move = L % int2048::kNum; - for (int i = 0; i < this->num_length - big_move; i++) { + for (int i = 0; i < this->buf_length - big_move; i++) { this->val[i] = this->val[i + big_move]; } - for (int i = this->num_length - big_move; i < this->num_length; i++) { + for (int i = this->buf_length - big_move; i < this->buf_length; i++) { this->val[i] = 0; } this->num_length -= big_move * int2048::kNum; if (small_move == 0) return; const static int kPow10[9] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000}; - for (int i = 0; i < this->num_length; i++) { + for (int i = 0; i < this->buf_length; i++) { this->val[i] /= kPow10[small_move]; - if (i + 1 < this->num_length) { + if (i + 1 < this->buf_length) { this->val[i] += this->val[i + 1] % kPow10[small_move] * kPow10[int2048::kNum - small_move]; }