c函数返回时变量改变

问题描述:

在一个函数return之前,一个全局变量还是正常,但是在该函数返回后,一个全局变量居然变了,但是在该函数内部并没有修改此全局变量。

下面是模拟的代码,只是模拟只是模拟只是模拟

int func(int a, int b)
{
    return a+b;
}

int     c;
long    va = 1;

//此时 va == 1 正常

d->next[c] = func(1, 2);

// 这时 va != 1

只是模拟


原因:

由于c声明为有符号,在之前赋值时导致 c == -1,而 d->next[-1] 刚好指向 va 的地址,导致函数一返回,va就变了。


避免:

1.在声明变量时,有符号和无符号要严格区分,比如上面的变量 c,可以声明为 unsigned int。

2.char,unsigned char 在不同地方也要严格声明,虽然很多时候不出现错误,一旦出错,很难排查。


比如:

#include <stdio.h>
  
int main(){
    char c;
    unsigned char uc;

    c = 0xff;
    uc = 0xff;

    printf("%d\n", c);

    printf("%d\n", uc);

    return 0;
}
[root@dldl ccc]# ./a.out 
-1
255


上一篇: c运行常见错误总结
下一篇: 无
作者邮箱: 203328517@qq.com