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));是否有不指定强制类型转换类型的特定原因?