当前位置: 技术问答>linux和unix
请教全局变量问题!
来源: 互联网 发布时间:2015-11-06
本文导语: 代码 [a.h] class CA1 { ... }; extern int g_nCount; [a.cpp] int g_nCount; [main.cpp] #include "a.h" int main(int argc, char** argv) { g_nCount = 0; } 编译过程没有问题,但执行时不行错误信息:segmentation fault。开始我将全局变量放...
代码
[a.h]
class CA1
{
...
};
extern int g_nCount;
[a.cpp]
int g_nCount;
[main.cpp]
#include "a.h"
int main(int argc, char** argv)
{
g_nCount = 0;
}
编译过程没有问题,但执行时不行错误信息:segmentation fault。开始我将全局变量放在单独的一个头文件中,可编译都通不过,请问该如何使用?
[a.h]
class CA1
{
...
};
extern int g_nCount;
[a.cpp]
int g_nCount;
[main.cpp]
#include "a.h"
int main(int argc, char** argv)
{
g_nCount = 0;
}
编译过程没有问题,但执行时不行错误信息:segmentation fault。开始我将全局变量放在单独的一个头文件中,可编译都通不过,请问该如何使用?
|
在c区的一个帖子中有人提出了一个匪夷所思的现象:
同名全局变量可以在多个c文件中同时定义并且编译连接通过,唯一前提是最多只有一个地方把这个全局变量初始化……
无限迷惑中……
同名全局变量可以在多个c文件中同时定义并且编译连接通过,唯一前提是最多只有一个地方把这个全局变量初始化……
无限迷惑中……
|
yzx1983(捕风捉影) ,是吗?哪里,去开开眼。
|
[a.h]
class CA1
{
...
};
extern int g_nCount; //声明
[a.cpp]
int g_nCount; //定义
标准的全局变量,没有问题.
class CA1
{
...
};
extern int g_nCount; //声明
[a.cpp]
int g_nCount; //定义
标准的全局变量,没有问题.
|
大雪啊,如果你的头文件被包含多次,
然后变量就被声明多次的话,那么说明你的头文件本身就有问题啊,
说明你没有加上防止重复定义的开关。。。
然后变量就被声明多次的话,那么说明你的头文件本身就有问题啊,
说明你没有加上防止重复定义的开关。。。
|
根据楼主的提示,俺认认为是指针的问题,当然不在楼主给出的代码里,应该在其他的部分
|
segmentation fault跟你那个全局变量没关系的,至少你贴出来的这些代码是这样的.
全局变量不能放在头文件, 因为变量只能被声明一次, 如果头文件被包含多次, 变量将会被声明多次.
全局变量不能放在头文件, 因为变量只能被声明一次, 如果头文件被包含多次, 变量将会被声明多次.
|
就贴出的代码看没有什么问题,看看别处吧。在main里多搞几个printf帮助定位错误的地方
|
不是全局变量问题,全局变量出错要么是redefine,要么是undefine.只要不在函数,类里面(。。。)的变量都叫全局变量,具体怎么定义看你自己的习惯。include相当于直接把文件代码贴上去。对于类的定义有种特殊规则SDR(single defination rule),BS的那本C++讲得比较细。
|
全局变量没有问题的,要不你用gdb跟一下吧,或者用core调试一下!
|
跟全局变量无关
你在头文件中只是声明全局变量,不会造成重复定义
即使重复定义,你编译也通不过阿
自己跟踪一下吧
你在头文件中只是声明全局变量,不会造成重复定义
即使重复定义,你编译也通不过阿
自己跟踪一下吧
|
断错误一般都是越界。
|
就给出的代码看
没有任何问题
没有任何问题
|
yzx1983(捕风捉影)
原文中说的是可以在多个C文件中“声明”同一个全局变量,而不是“定义”
声明跟定义是不同的
原文中说的是可以在多个C文件中“声明”同一个全局变量,而不是“定义”
声明跟定义是不同的