尝试释放 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()
,你没有对返回值进行强制转换,下次也不要这样做。
这是我的 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()
,你没有对返回值进行强制转换,下次也不要这样做。