【发布时间】:2020-03-24 04:23:24
【问题描述】:
鉴于下面的结构,我正在创建一个函数,该函数接收 person_in_queue 和 position_num 并分配一个新的 queue_t 结构,该结构添加到 queue_t 结构列表的末尾,由第一个参数。
typedef struct queue {
int position_num;
char *person_in_queue;
struct queue *next_in_line;
} queue_t;
我的代码是这样写的:
queue_t *add_to_queue(queue_t *input_queue, char *person_in_queue, int position_num) {
input_queue = malloc(sizeof(queue_t));
assert(input_queue != NULL);
input_queue->position_num = position_num;
input_queue->person_in_queue = (char *) malloc((strlen(new_text) + 1) * sizeof(char));
assert(input_queue->person_in_queue != NULL);
strcpy(input_queue->person_in_queue, person_in_queue);
return input_queue;
}
所述代码可以编译,但是,我被告知我的代码失败了,因为分配的内存比预期的要少。目前,我不确定我在哪里出错了。请注意,我需要使用malloc()!
非常感谢!
【问题讨论】:
-
好吧,快速浏览一下:
input_queue是queue_t *类型,但你正在做malloc(sizeof(operation_t))。除此之外:您将input_queue作为参数并立即将其覆盖为函数中的第一件事,然后返回它。这没有多大意义,并且完全不需要将其作为参数传递。 -
这个问题被标记为 C。不要在 C 中强制转换 malloc()。它可能会导致错误。强制转换 malloc() 是 C++ 的习惯。 stackoverflow.com/questions/605845/…
-
也不需要使用
* sizeof(char)。 C 标准将 char 指定为一个字节,因此sizeof(char)始终返回 1。 -
你越来越近了——但是注意:当你编辑你的问题时,不要删除原来的问题.而是在问题结束时添加 更新或编辑。为什么?因为删除原始问题的某些部分将呈现与问题的已删除部分相关的所有 cmets 和答案——毫无意义。
-
你不能断言 malloc 没有返回 NULL,因为 malloc 可能返回 null。你需要检查它,使用
assert不是错误检查。
标签: c struct malloc typedef deep-copy