Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 局部变量可能尚未初始化_C - Fatal编程技术网

C 局部变量可能尚未初始化

C 局部变量可能尚未初始化,c,C,我试图从我的主函数调用queue\u t,以给出queue\u t的大小,然后我打算打印出来用于测试 为什么它说我的q在第21行初始化时没有初始化 #include <stdio.h> #include <stdlib.h> #include <string.h> struct queue_t { char *name; int size; int entries; double time; stru

我试图从我的主函数调用
queue\u t
,以给出
queue\u t
的大小,然后我打算打印出来用于测试

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

#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);

}
#包括
#包括
#包括
结构队列{
字符*名称;
整数大小;
整数分录;
双倍时间;
结构数据包**数据包;
int-read;
int-write;
失传已久;
};
结构队列\u t*队列\u创建(字符*名称,整数大小){
int i;
结构队列_t*q;
q->尺寸=尺寸;
q->name=name;
printf(“队列名称:%s”,q->Name);
printf(“队列大小:%d”,q->Size);
回报率(q);
}
int main(){
char*a=“测试”;
int size=80;
队列创建(a,大小);
}
这里的指针
q
显然未初始化。然后在
q->size
中使用它。在使用之前,您应该分配/初始化一个变量,即
q=something。使用未初始化的指针值可能是未定义的行为

你可以:

struct queue_t *q = malloc(sizeof(*q));
if (q == NULL) { fprintf(stderr, "ERROR! malloc!\n"); abort(); }
q->size = size;
q
在这里被明确指定了一个值,即
malloc()
调用的结果。它为堆上的队列分配内存。记住
free()
指针,这样程序就不会泄漏内存

您还可以为堆栈上的变量分配内存:

struct queue_t q_memory;
struct queue_t *q = &q_memory;
q->size = size;
但是请注意,在这种情况下,在关闭声明内存的块后,即在
}
之后,内存将无效!所以,如果您想从函数返回它,就不要使用它

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

你可以:

struct queue_t *q = malloc(sizeof(*q));
if (q == NULL) { fprintf(stderr, "ERROR! malloc!\n"); abort(); }
q->size = size;
q
在这里被明确指定了一个值,即
malloc()
调用的结果。它为堆上的队列分配内存。记住
free()
指针,这样程序就不会泄漏内存

您还可以为堆栈上的变量分配内存:

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

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

第21行是
struct queue\u t*q在以下两行中取消引用之前,它不指向已定义的任何位置
q
未使用值初始化。第21行是
struct queue\u t*q在以下两行中取消引用之前,它不指向已定义的任何位置
q
未使用值初始化。为什么不像这样使用malloc呢?结构队列*q=(结构队列*malloc(sizeof(*q));没有指定强制类型转换类型有什么特别的原因吗?为什么不像这样使用malloc呢?结构队列*q=(结构队列*malloc(sizeof(*q));是否有不指定强制类型转换类型的特定原因?