gpt4 book ai didi

c - 局部变量可能尚未初始化

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:33 26 4
gpt4 key购买 nike

我正在尝试从我的主函数调用 queue_t,以便为 queue_t 提供我打算打印出来用于测试目的的大小。

为什么当我在第 21 行时它说我的 q 没有初始化?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct queue_t {

char *name;
int size;
int entries;
double time;
struct packet_t **packets;
int read;
int write;
long lost;

};

struct queue_t *queue_create (char *name, int size) {

int i;
struct queue_t *q;
q->size = size;
q->name = name;
printf("Name of queue: %s", q->name);
printf("Size of queue: %d", q->size);

return (q);
}


int main () {

char *a = "Test";
int size = 80;
queue_create(a, size);

}

最佳答案

struct queue_t *q;
q->size = size;

指针q 在这里显然是未初始化的。然后在 q->size 中使用它。您应该在使用之前分配/初始化变量,即。 q = 某物;。使用未初始化的指针值可能是未定义的行为。

您可以:

struct queue_t *q = malloc(sizeof(*q));
if (q == NULL) { fprintf(stderr, "ERROR! malloc!\n"); abort(); }
q->size = size;

q 在这里显然被赋值了,即。 malloc() 调用的结果。它在堆上为 queue_t 分配内存。请记住 free() 指针,这样您的程序就不会泄漏内存。

你也可以为栈上的变量分配内存:

struct queue_t q_memory;
struct queue_t *q = &q_memory;
q->size = size;

但请注意,在这种情况下,内存在关闭声明它的 block 后将无效,即。在 } 之后!因此,如果您想从函数中返回它,请不要使用它。

关于c - 局部变量可能尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54163077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com