我正在try 将元素添加到函数中的动态 struct 数组中.一切似乎都是正确的,当我添加第一个元素时,它实际上成功了,但当我try 添加另一个元素时,我得到:
realloc(): invalid next size
我try 以多种方式对其进行调试,判断是否所有的值都是正确的--当前大小、分配的内存等等,一切都是正常的.我甚至"手动"地做了(没有一个函数),它的工作就像它应该工作的那样,但当我用这个函数做它时,它失败了.我是不是在代码中犯了一个我看不到的错误,或者我错过了一些关于动态内存分配的东西?
以下是代码:
typedef struct Product_t {
char name[100];
int price;
int id;
} Product;
void add_product(Product** products, Product product, int *size) {
(*size) += 1;
if(realloc((*products), (*size) * sizeof(Product)) == NULL)
exit(1);
(*products)[*size - 1] = product;
}
int main() {
Product* products = (Product*) malloc(0);
int products_size = 0;
Product p1 = {"product1", 45, 1};
Product p2 = {"product2", 212, 2};
Product p3 = {"product3", 123, 3};
add_product(&products, p1, &products_size);
add_product(&products, p2, &products_size);
add_product(&products, p3, &products_size);
return 0;
}
附注:例如,我知道使用链表会更好,但我需要使用动态array.