From 55e13063ea0345c911e4deb3f01b38f9b6374002 Mon Sep 17 00:00:00 2001 From: Robin Getz Date: Tue, 21 Jul 2026 20:01:53 -0400 Subject: [PATCH] ft8: replace temporary malloc buffer with std::vector Replace the temporary CRC working buffer in `LDPC::ft8_crc()` with a `std::vector`. The vector is value-initialized, preserving the existing zero-padding behavior, while `std::memcpy()` copies the input message into the front of the buffer. This removes the manual `malloc()`/`free()` pair, simplifies the implementation, and uses RAII for temporary storage. This change also addresses a cppcheck warning about a possible null pointer dereference following malloc() failure. If memory allocation now fails, std::vector will throw std::bad_alloc rather than returning a null pointer that would be dereferenced. The algorithm and behavior are otherwise unchanged. Signed-off-by: Robin Getz --- ft8/libldpc.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/ft8/libldpc.cpp b/ft8/libldpc.cpp index e15eed5a2..17d572df8 100644 --- a/ft8/libldpc.cpp +++ b/ft8/libldpc.cpp @@ -35,7 +35,8 @@ #include #include -#include +#include +#include #include "arrays.h" #include "libldpc.h" @@ -371,19 +372,8 @@ void LDPC::ft8_crc(int msg1[], int msglen, int out[14]) // with leading 1 bit. int div[] = {1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1}; // append 14 zeros. - int *msg = (int *)malloc(sizeof(int) * (msglen + 14)); - - for (int i = 0; i < msglen + 14; i++) - { - if (i < msglen) - { - msg[i] = msg1[i]; - } - else - { - msg[i] = 0; - } - } + std::vector msg(msglen + 14); + std::memcpy(msg.data(), msg1, msglen * sizeof(int)); for (int i = 0; i < msglen; i++) { @@ -400,8 +390,6 @@ void LDPC::ft8_crc(int msg1[], int msglen, int out[14]) { out[i] = msg[msglen + i]; } - - free(msg); } // rows is 91, cols is 174.