-9

我有一个功能:

int somefunction(int a, int b, char *c, int d){}

现在这个函数在另一个函数中被调用,该函数位于main().

我打电话somefunction(a, b, c, d);,我把它打印出来int a,女巫被宣布为 50,在somefunction()被调用之前。在第一次调用中打印了 50,一切都很好,但第二次调用somefunction()打印出 29549。这些函数调用在一些 if 语句中,即使调用了第二个位置somefunction(),也首先调用它是相同的。

为了测试所有输入值都设置为相同,所以它不是输入。在调用之前打印所有输入值somefunction(),并且它们应该是。我尝试重命名所有变量、函数,尝试将所有 int 更改为 float,并尝试将变量的顺序移动到somefunction(). 但注意改变了。我也做过原型,不是那样的。

那么有没有人知道什么可以解决这个问题?实际代码不在这里,因为我通过了 2000 行,中间会有很多不相关的代码。我意识到这可能很难帮助我,所以我只问是否有人经历过类似的事情。

4

2 回答 2

0

我写了一个示例代码来测试你的逻辑。请在下面找到一个功能正常的小代码。

#include <stdio.h>

void someFunc(int a, int b)
{
    printf("Inside interface function: a: %d\t b: %d\n", a, b);
}

int main(int argc, char** argv)
{
      int a = 35, b = 45;
      printf("a = %d, b = %d\n", a, b);
     someFunc(a, b);
     a = 50; b = 75;
     printf("a = %d, b = %d\n", a, b);
     someFunc(a, b);

     return 0;
}
于 2013-02-10T15:58:03.603 回答
0

所以,如果我使用的是带有指针和不安全数组的语言,并且疯狂的事情开始发生,那么我很快就会怀疑我正在覆盖内存。有很多方法可以做到这一点:写入数组的末尾,使用未初始化的指针,释放从未 malloc()ed 的东西,等等。

如果这就是您的情况,那么在没有看到精确完整的代码的情况下很难解决它(尝试制作一个简化的示例通常只会让问题消失,因为您要么删除错误的代码或重新排列内存,以便有所不同也许无害正在被覆盖)。

如果你不能发布一个完整的例子来展示这个错误,那么你可以开始寻找可能的罪魁祸首:a)所有使用动态内存函数,b)所有指针的取消引用。

我可以从你的另一篇文章中收集到的所有信息是 a) 是的,这种代码对于野指针来说已经成熟了,b) 嗯,这是什么:

char char_buffer[] = "What ever";

很难从代码片段中猜测出来,但通常“缓冲区”这个词意味着一些会被多次重用的大量空间。您已将字符指针命名为“char_buffer”,但它实际上指向一个字符串常量。因此,例如,如果您稍后尝试将 11 个字符的数据复制到其中,那么您将覆盖其他内容(假设编译器/链接器没有为您将常量存储在只读内存中)。

于 2013-02-10T16:26:32.027 回答