aboutsummaryrefslogtreecommitdiff
path: root/src/ds
diff options
context:
space:
mode:
authorMosder <git@mosder.eu>2026-10-20 16:37:15 +0200
committerMosder <git@mosder.eu>2026-10-20 16:37:15 +0200
commit9609fded10590ebcc7e91af4da4b19695d416182 (patch)
tree2211ab87fbbdd59fa1941268b060dc194f3620ba /src/ds
parent4c003115e16331d7389a8a810caa17d526881703 (diff)
fix: fixed some memory related bugsHEADmaster
Diffstat (limited to 'src/ds')
-rw-r--r--src/ds/array.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/ds/array.c b/src/ds/array.c
index 6a65d49..b36ddf5 100644
--- a/src/ds/array.c
+++ b/src/ds/array.c
@@ -61,7 +61,7 @@ void mos_arr_insert_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap) {
void mos_arr_put_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap) {
ini(i + 1);
- if (i > hdr->len) {
+ if (i >= hdr->len) {
memset((char *)arr + hdr->len * el_size, 0, (i - hdr->len) * el_size);
hdr->len = i + 1;
}
@@ -93,14 +93,14 @@ size_t mos_arr_insert_n_fn(
size_t mos_arr_put_n_fn(
void *p_arr, size_t i, const void *items, size_t n, size_t el_size, size_t init_cap
) {
- ini(i + n + 1);
+ ini(i + n);
if (i > hdr->len) {
memset((char *)arr + hdr->len * el_size, 0, (i - hdr->len) * el_size);
}
memmove((char *)arr + i * el_size, items, n * el_size);
- if (i + n + 1 > hdr->len)
- hdr->len = i + n + 1;
+ if (i + n > hdr->len)
+ hdr->len = i + n;
return i;
}
@@ -125,10 +125,10 @@ size_t mos_arr_del_n_fn(void *arr, size_t i, size_t n, size_t el_size) {
return 0;
size_t new_n = n > hdr->len - i ? hdr->len - i : n;
+ hdr->len -= new_n;
memmove(
(char *)arr + i * el_size, (char *)arr + (i + new_n) * el_size, (hdr->len - i) * el_size
);
- hdr->len -= new_n;
return new_n;
}