C 当我将变量的值传递给函数时,它的值会发生变化

C 当我将变量的值传递给函数时,它的值会发生变化,c,C,我今天在调试程序时遇到了一个问题 我试图将一个整数变量传递给同一程序中的函数。当函数接收到值时,函数内部的接收变量中的值会有所不同,我无法找到原因 下面是调用函数的行 prefetch_miss(addr,pref_m,sbuff,0,evict_row, SB); 下面是接收功能的3行开始 void prefetch_miss(int address, int m, s **sbuff, int next, int r, cache *b) { int index_value=0, tag

我今天在调试程序时遇到了一个问题

我试图将一个整数变量传递给同一程序中的函数。当函数接收到值时,函数内部的接收变量中的值会有所不同,我无法找到原因

下面是调用函数的行

prefetch_miss(addr,pref_m,sbuff,0,evict_row, SB);
下面是接收功能的3行开始

void prefetch_miss(int address, int m, s **sbuff, int next, int r, cache *b) {

int index_value=0, tag_value=0;
address = address + 1;
请注意,addr是一个全局变量。在调试中,我可以在函数调用之前看到addr的值为33558587。在函数内部,address的值是33558569


哪里出错了?

检查是否在全局变量之前定义了某种数组,并且覆盖了超出数组大小分配范围的数组,从而改变了变量地址的值。顺便说一句,如果地址是一个全局变量,为什么需要将其传递给例程?全局变量对所有例程都可见。

能否将代码缩小到重现问题的范围?请检查对内存中变量前面的对象的访问,缓冲区可能溢出,对象在溢出过程中被修改。@KeithThompson我试图用类似的逻辑编写一个简单的程序,但效果很好。那么太简单了。从您现有的代码开始,丢弃代码块,直到问题消失,然后返回一步。(源代码管理系统有帮助。)实际程序的流程与下面的程序相同,只是我从文件中读取了addr#包括int addr=0;无效预取(int);int main(){addr=33558587;write();}write(){prefetch_-miss(addr)}prefetch_-miss(int-address){address=address+1;}我的编码方式要求传递全局变量。通过将值分配给另一个局部变量并传递它,我已经克服了这个问题。不过,我仍然不明白为何会出现这个问题。我想我应该更清楚地解释这个问题。谢谢你的帮助!将值复制到局部变量可以解决您的问题,但我建议您解决为什么修改全局变量的实际问题。我曾经遇到过一个类似的问题,当一个在全局变量之前定义的数组溢出时,全局变量被覆盖,这导致我的程序崩溃。我建议您通过调试器运行程序,并尝试在每一步查看变量是否被修改。