c - 空指针数组: valgrind gives invalid write size of 8

标签 c arrays pointers valgrind

在 C 中,我喜欢通过 void 指针使用匿名数组,但是在调试时发生了一些内存损坏。当我使用 valgrind 时,它会发送垃圾邮件提到的消息。

老实说,我不知道该尝试什么,因为这是一种有点奇怪的情况。

struct list_t {                                                                 
    void* first;                                                                
    void** elements;                                                            
    void* last;                                                                                                                                                                                                                                                                                                                

    unsigned int max_number_of_elements;                                        
    unsigned int number_of_elements;                                            

    unsigned int counter;                                                       
    void* element_current;                                                      
};
typedef struct list_t list;                                                     
typedef list* List; 
List list_create(                                                               

) {                                                                             
    List list = malloc(sizeof(list));                                                                          

    list->elements = (void**)malloc(sizeof(void*) * 16 );                                                                          

    ...                                             

    return list;                                                                
}

PS:为什么将其标记为重复项,因为与此问题相关的任何问题都没有明确的答案,甚至是远程相关的问题?

最佳答案

我明白出了什么问题。 List list 创建一个list_t* 并为其分配已分配的内存。然而,sizeof(list) 只为指针分配了足够的内存。您的编译器正在选择 list_t* 的大小,而不是 list_t 的大小。这意味着错误之前的行就是问题所在。将其更改为:

列表 list = (void*)malloc(sizeof(list_t));

然后它应该可以工作。本地指针名称隐藏了结构名称,因此选择了错误的大小来分配。

关于c - 空指针数组: valgrind gives invalid write size of 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623748/

相关文章:

C 指向二维数组的指针

c - 实际上是否可以在 C 上存储和处理单个 UTF-8 字符?如果是这样,如何?

java - Java将字符串转为float

c++ - 是否必须重置 std::array 元素?

java - 使用十六进制表示法的 byte[] 数组的文字语法..?

c - 指针、取消引用和引用

C指针上的指针: unused variable

将数组值与 C 中的单个值进行比较

c - 从 C 访问网络数据包中未对齐数据的安全、高效的方法

c++ - 调用函数时从 'char' 到 'char*' 的无效转换 (c++)