编译错误 - 变量指针在此处使用时未初始化

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"

Demo

注:

你的 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)。