C语言中全局结构体指针隐含的错误

  前天在嵌入式系统上,调试一个数组的全局变量时,发现该变量一直会动态变化。深入分析,

才发现该全局结构体没有申请内存,而是用了一个指针。这种情况编译器是检查不出来的,在linux

上运行会挂掉,但是在裸系统上运行不会挂死。

  错误的例子:

#include <stdio.h>
typedef struct
{
        int testa;
        int testb;
}str_test;

str_test* g_str_test;

int main()
{
        g_str_test->testa = 10;
        printf("testa:%d 
	",g_str_test->testa);
        printf("testb:%d 
	",g_str_test->testb);
}  

  正确的方法:

  

#include <stdio.h>
typedef struct
{
        int testa;
        int testb;
}str_test;

str_test g_s_test;
         
int main()
{            
        g_s_test.testa = 10; 
        printf("testa:%d 
	",g_s_test.testa);
        printf("testb:%d 
	",g_s_test.testb);
} 

  总结反思:C语言是很博大精深的,里面很多东西要深入的研究。要达到滚瓜烂熟的境界。

原文地址:https://www.cnblogs.com/dylancao/p/8026467.html