【发布时间】:2021-02-08 00:28:00
【问题描述】:
#define ACTION_LIST_N 3
#define MALLOC 1
#define REALLOC 2
typedef struct action action_t;
struct action {
char name; // action name
state_t precon; // precondition
state_t effect; // effect
};
main(int argc, char *argv[]) {
action_t** action_list;
make_action_list(action_list, ACTION_LIST_N, MALLOC);
action_list[0] = (action_t*)malloc(sizeof(**action_list));
printf("1"); <- DOES NOT EXECUTE
return 0;
}
void
make_action_list(action_t** action_list, int n, int request) {
if (request==MALLOC) {
action_list = (action_t**)malloc(n * sizeof(*action_list));
if_null(action_list, "Initial allocation failure");
} else if (request==REALLOC) {
action_list = (action_t**)realloc((action_t**)action_list, (n*2)*sizeof(*action_list));
if_null(action_list, "Realloc failure");
}
}
很抱歉,这篇文章很长,但我真的卡住了,不知道如何解决这个问题。
我创建了一个指向结构 (action_list) 的指针数组,并使用 make_action_list() 为 action_list 分配了内存。但是,当我尝试在数组中的第一个指针上调用 malloc 时,程序退出时没有任何警告消息,并且永远不会打印“1”。我究竟做错了什么?提前致谢。
我在这里关注动态数组的教程:C: pointer to array of pointers to structures (allocation/deallocation issues)
【问题讨论】:
-
在函数中,
action_list = (action_t**)malloc(n * sizeof(*action_list));设置的值会覆盖传递的函数参数,不会改变main()中的任何内容。action_list的值被遗忘(并且您有内存泄漏)。然后用action_list[0]取消引用uninitialised 指针。顺便说一句,在调试中确保printf("1");不执行请添加fflush(stdout);
标签: arrays c pointers dynamic malloc