编译错误 - 变量指针在此处使用时未初始化
Compilation error - Variable pointer is uninitialized when used here
#include <stdio.h>
#define LENGTH_OF_A_MACRO 5
struct structS{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO];
unsigned int noOfScgsToTrace;
} structS;
int main()
{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO] = {0};
unsigned int noOfScgToTrace = 0;
structS* commonData_p;
noOfScgToTrace = commonData_p->noOfScgsToTrace; //Q1: Compilation Error
for (unsigned int i = 0; i < noOfScgToTrace; i++) //Q2: noOfScgToTrace garbage value?
{
unsigned int scgToTrace = scgsToTrace[i];
...............................
}
return 0;
}
我正在尝试使用指针变量 commonData_p 从 structS 分配 noOfScgsToTrace。
但是我在这里遇到编译错误,说变量“commonData_p”在此处使用时未初始化,如上面评论附近所述。我应该明确地初始化它吗?如何?
我这里有两个问题
问题一:为什么这里说未初始化?
问题 2:通过将 noOfScgToTrace 初始化为 0,如果它没有正确分配,它是否将值视为 for 循环中的垃圾值?
非常感谢您的帮助。提前致谢!
嗯,你有一个结构 structS
和一个指向这种类型的指针 commonData_p
。但是你从来没有为那个指针分配任何东西——它是单元化的。你需要延长线
struct structS* commonData_p = &structS;
为了让编译器知道指向哪里。
您忘记命名 commonData_p
的类型,这就是您遇到编译错误的原因。你也忘了初始化它:
struct structS* commonData_p = &structS; // note "struct structS"
注:
你的 noOfScgToTrace = commonData_p->noOfScgsToTrace;
很好,因为全局 structS
是自动初始化的(为零)但是如果你将声明移动到一个函数中,比如 main
,它就没有被初始化并且阅读它会使您的程序具有未定义的行为。
这个编译错误
Compilation error - Variable pointer is uninitialized when used here
意味着两件事。
第一个是在你的问题中输入代码,你通过省略 typedef 说明符打错了字。那是
struct structS{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO];
unsigned int noOfScgsToTrace;
} structS;
一定有
typedef struct structS{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO];
unsigned int noOfScgsToTrace;
} structS;
否则编译器会报错。
第二个是你声明了一个未初始化的指针
structS* commonData_p;
noOfScgToTrace = commonData_p->noOfScgsToTrace; //Q1: Compilation Error
具有不确定的值。因此,编译器会发出一个错误,表明您正在尝试使用未初始化的指针访问内存 (commonData_p->noOfScgsToTrace
)。
#include <stdio.h>
#define LENGTH_OF_A_MACRO 5
struct structS{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO];
unsigned int noOfScgsToTrace;
} structS;
int main()
{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO] = {0};
unsigned int noOfScgToTrace = 0;
structS* commonData_p;
noOfScgToTrace = commonData_p->noOfScgsToTrace; //Q1: Compilation Error
for (unsigned int i = 0; i < noOfScgToTrace; i++) //Q2: noOfScgToTrace garbage value?
{
unsigned int scgToTrace = scgsToTrace[i];
...............................
}
return 0;
}
我正在尝试使用指针变量 commonData_p 从 structS 分配 noOfScgsToTrace。 但是我在这里遇到编译错误,说变量“commonData_p”在此处使用时未初始化,如上面评论附近所述。我应该明确地初始化它吗?如何? 我这里有两个问题
问题一:为什么这里说未初始化? 问题 2:通过将 noOfScgToTrace 初始化为 0,如果它没有正确分配,它是否将值视为 for 循环中的垃圾值?
非常感谢您的帮助。提前致谢!
嗯,你有一个结构 structS
和一个指向这种类型的指针 commonData_p
。但是你从来没有为那个指针分配任何东西——它是单元化的。你需要延长线
struct structS* commonData_p = &structS;
为了让编译器知道指向哪里。
您忘记命名 commonData_p
的类型,这就是您遇到编译错误的原因。你也忘了初始化它:
struct structS* commonData_p = &structS; // note "struct structS"
注:
你的 noOfScgToTrace = commonData_p->noOfScgsToTrace;
很好,因为全局 structS
是自动初始化的(为零)但是如果你将声明移动到一个函数中,比如 main
,它就没有被初始化并且阅读它会使您的程序具有未定义的行为。
这个编译错误
Compilation error - Variable pointer is uninitialized when used here
意味着两件事。
第一个是在你的问题中输入代码,你通过省略 typedef 说明符打错了字。那是
struct structS{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO];
unsigned int noOfScgsToTrace;
} structS;
一定有
typedef struct structS{
unsigned int scgsToTrace[LENGTH_OF_A_MACRO];
unsigned int noOfScgsToTrace;
} structS;
否则编译器会报错。
第二个是你声明了一个未初始化的指针
structS* commonData_p;
noOfScgToTrace = commonData_p->noOfScgsToTrace; //Q1: Compilation Error
具有不确定的值。因此,编译器会发出一个错误,表明您正在尝试使用未初始化的指针访问内存 (commonData_p->noOfScgsToTrace
)。