attractivechaos / klib

A standalone and lightweight C library

Home Page:http://attractivechaos.github.io/klib/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

kv_resize to smaller doesn't set n

hagna opened this issue · comments

commented

Should
#define kv_resize(type, v, s) ((v).m = (s), (v).a = (type*)realloc((v).a, sizeof(type) * (v).m))
Change to
#define kv_resize(type, v, s) ((v).m = (s), (v).n = (s), (v).a = (type*)realloc((v).a, sizeof(type) * (v).m))?

Without that change this:

#include "kvec.h"

int main() {
    kvec_t(int) dynamic_array;
    kv_init(dynamic_array);

    for (int i = 1; i <= 10; ++i) {
        kv_push(int, dynamic_array, i * 10);
    }

    printf("Original Vector:\n");
    for (size_t i = 0; i < kv_size(dynamic_array); ++i) {
        printf("Element %zu: %d\n", i, kv_A(dynamic_array, i));
    }

    size_t new_size = 5;
    kv_resize(int, dynamic_array, new_size);

    printf("\nResized Vector (to a smaller size):\n");
    for (size_t i = 0; i < kv_size(dynamic_array); ++i) {
        printf("Element %zu: %d\n", i, kv_A(dynamic_array, i));
    }

    kv_destroy(dynamic_array);

    return 0;
}

produces this:

Element 0: 10
Element 1: 20
Element 2: 30
Element 3: 40
Element 4: 50
Element 5: 60
Element 6: 70
Element 7: 80
Element 8: 90
Element 9: 100

Resized Vector (to a smaller size):
Element 0: 10
Element 1: 20
Element 2: 30
Element 3: 40
Element 4: 50
Element 5: 60
Element 6: 49
Element 7: 0
Element 8: 1586204044
Element 9: 5