尝试释放 int 指针数组时出现 valgrind 错误。不知道为什么

Getting valgrind errors when trying to free int pointer array. Not sure why

这是我的 code/valgrind 错误。谁能帮我弄清楚我哪里出错了。

struct Stores{
    int storeNumber;
    int *itemCost;
} Stores;

Stores store;
store = calloc(1,numStores*sizeof(store));

store.itemCost = (int*) calloc(1, numItems*sizeof(int)); //(numItems = 2)

store.itemCost[0] = 10;
store.itemCost[1] = 10;

free(store.itemCost);  <---- Error here
free(store);

我遇到的 valgrind 错误:

--Invalid read of size 8

首先,没有 typedef

Stores store;

错了。 Stores 不是 类型 ,无论如何。

考虑

typedef struct Stores{
    int storeNumber;
    int *itemCost;
} Stores;

然后

Stores store;

您根本不需要(更确切地说,不能calloc()

如果你想玩分配动态内存,你需要改变

Stores *store;  // a pointer

以及从 .-> 的相关成员访问运算符,如适用。

故事的寓意:启用编译器警告并留意它们。

也就是说,第一个calloc(),你没有对返回值进行强制转换,下次也不要这样做。