我正在尝试增加一个数组以添加新的malloc指针。重新分配似乎并没有增加大小。此外,我从数组中的一个指针的足够空间开始,因此,即使重新分配没有增加大小,我仍然希望能够复制一个指针,但是却遇到了SIGSEGV Segmentation Fault。

typedef struct active_allocation {
    size_t sz;
    void *ptr;
} ACTIVE_ALLOCATION;

struct m61_state {
    ACTIVE_ALLOCATION **active_allocations_ptrs_arr; //Array of Points to Active Allocations
    size_t sz;
};
struct m61_state m61_state;
...
ACTIVE_ALLOCATION **active_allocations_ptrs_arr = malloc(sizeof(ACTIVE_ALLOCATION*) *1);
m61_state.active_allocations_ptrs_arr = active_allocations_ptrs_arr;
...
//Create a New pointer, to add to the array
ACTIVE_ALLOCATION *active_allocation_record = malloc(sizeof(ACTIVE_ALLOCATION));

// ** Initially there's space for one pointer, but it hasn't been used yet.
//m61_state->sz equals 0.
//Trying to increase the size of an array to 8 for one more ACTIVE_ALLOCATION* Last 4 can be set to NULl
//sizeof(new_active_alloc_array_ptr) equals 4 at this point
new_active_alloc_array_ptr = realloc(m61_state->active_allocations_ptrs_arr, m61_state->sz + sizeof(ACTIVE_ALLOCATION*));

//** sizeof(new_active_alloc_array_ptr) still equals 4.  I want it to be 8. I'm not sure why the size didn't change.

//Copy the new pointer that was just created active_allocation_record to the array
memset(m61_state->active_allocations_ptrs_arr[sizeof(ACTIVE_ALLOCATION*)* m61_state->sz], (int)active_allocation_record, sizeof(ACTIVE_ALLOCATION*));

最佳答案

我不知道您为什么会期望new_active_alloc_array_ptr的大小发生变化,它是一个指针,并且始终具有相同的大小-指针的大小。

有很多错误都可能导致崩溃:

(1)当您似乎想要为m61_state->sz + sizeof(ACTIVE_ALLOCATION*)大小的m61_state->sz条目提供足够的空间时,需要将其调整为sizeof(ACTIVE_ALLOCATION*),因此应该为m61_state->sz * sizeof(ACTIVE_ALLOCATION*)

(2)您似乎正在将重新分配的指针存储到临时(new_active_alloc_array_ptr),然后访问原始的m61_state->active_allocations_ptrs_arr值。

(3)当您访问数组时,您正在以[sizeof(ACTIVE_ALLOCATION*)* m61_state->sz]的形式访问元素-这里没有对sizeof(ACTIVE_ALLOCATION*)*的调用,它应该为[m61_state->sz]

(4)从n0访问大小为n-1的数组中的元素,因此,即使您已正确分配以创建大小为m61_state->sz的数组,则[m61_state->sz]仍将指向一个元素超出您分配的空间的范围。

关于c - memset上的段故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18686452/

10-11 21:05