c++全局变量和函数
C++ Global variable and function
我正在用c++编程,使用不同的函数。我有一个问题与局部和全局变量的声明和使用。有许多变量首先必须在main中使用,并且还需要在函数中使用。
所以,我声明了一些全局变量。我还想在main()
之外分配一些内存。
但是现在代码似乎不起作用了。请帮我解决这个问题。
我:
int *mb = new int [c]; //declare variables before you use them
matrix *M = new matrix [n+1+m];
当我使用上述两个变量作为全局变量时,我的代码无法工作。
这是我的一部分代码:
int p=4, n=5, m=5;
int num;
struct matrix{
public:
int row;
int col;
int val;
};
int P(int k){
return k-1;
}
void M_to_C(){
int *mb,*mc,*mi;
double *mv;
int i, cur_col;
matrix*M;
cur_col=-1;
for(i=0; i<= num; i++) {
cur_col=M[i].col;
mb[cur_col]=i;
mc[cur_col]=1;
mi[i]=M[i].row;
mv[i]=M[i].val;
}}
int main (int argc, char **argv){
int status = 0;
int project = 4;
int employee = 5;
int time = 5;
int empl [] = {2, 2, 2, 3};
int meet [] = {2, 4, 3, 3};
int NUMCOLS=n+m;
double *lb = new double [NUMCOLS];
double *ub = new double [NUMCOLS];
double *x = new double [NUMCOLS];
int *mb= new int [NUMCOLS];
int *mc= new int [NUMCOLS];
char *ctype = new char [NUMCOLS];
int **F = new int*[employee];
for(int a = 1; a <= employee; a++){
F[a] = new int [time];
for(int b = 1; b <= time; b++){
F[a][b]=rand()%2;
}}
int NUMROWS=0;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
for(int l=1; l<=p; l++) {
if(F[i][j] ==0){
NUMROWS++;
num++;
}
}
}
}
int *mi= new int [2*NUMROWS+m];
double *mv= new double [2*NUMROWS+m];
matrix_entry *M = new matrix_entry [num+1+m];
num=-1;
int row=-1;
for(int i=1; i <= n; i++) {
for(int j=1; j <= m; j++) {
for(int k=1; k <= project; k++) {
if(F[i][j] ==0) {
row++;
num++;
M[num].col=P(k);
M[num].row=row;
M[num].val=-1;
}}}}
M_to_C();
您可以将它们定义为全局变量,并在main
中这样填充它们:
int *mb;
matrix *M;
int main () {
mb = new int [c];
M = new matrix [n+1+m];
:
}
但是我应该警告你,全局变量(和短变量名,如mb
, lb
和ub
)通常被认为是一个坏主意。
您最好通过将它们放在类中或根据需要将它们作为引用传递来限制它们的可访问性。
在M_to_C()
函数中,你对初始化的指针M
做了一些操作,所以基本上这是未定义的行为:
matrix*M;
cur_col=-1;
for(i=0; i<= num; i++) {
cur_col=M[i].col; // access local uninitialized pointer M
为了修复它,你应该在使用它之前初始化M属性。在本例中,局部变量M
隐藏全局变量。我建议将M传递给M_to_C()
函数,这样它就可以对现有对象进行操作:
void M_to_C(matrix * M)
相关文章:
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- std::线程不是全局变量,但在到达创建它的函数的末尾时不会超出范围?
- 如何在全局变量的构造函数之前运行函数
- 如何获取使用全局变量的所有函数名称?
- 在 C++17 中修改 constexpr 函数中的全局变量
- C++从 std::async 函数读取命名空间中的全局变量标志
- 为什么我的类函数不使用我的全局变量?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 将全局变量的名称作为输入并更改其值的函数
- 如何使用 c++ 中的函数访问全局变量?
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 如何创建用于多个源文件的全局变量/包含/函数
- 查找全局变量,而不是在 c++ 函数中构造它们
- 通过使用全局变量的函数访问在给定范围内被覆盖的变量
- 具有递归函数且不带全局变量的程序 - C++
- C++:如何从静态函数写入全局变量