c - 退出函数 C 时全局变量更改值

标签 c struct

关闭。这个问题需要debugging details .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




我对 C 编程很陌生,遇到了一个奇怪的问题。我有一个全局变量 这是一个具有几个成员的结构(tri_fact)。其中两个成员( tri .Q 和 tri .R)又是密集矩阵的另一种结构(dense_mat)。

我有一个函数可以将这些密集矩阵中的一些初始化为零。我遇到的问题是这些矩阵之一在退出初始化函数时具有垃圾值。然而,就在退出之前,一切看起来都很好。

struct tri_fact tri;
void init_func(){
    /*do some initializations*/
    /*tri.Q and tri.R looks good*/
}
void func(){
    init_func();
    /* tri.R looks good, but tri.Q is filled with junk */
}

我错过了一些基本的东西吗?

最佳答案

您应该了解的基本概念是 undefined behavior .见 this明白这是严重的。阅读来自 here 的引用资料.

您是否使用所有警告和调试信息编译了整个程序(所有代码)?与 GCC -例如。在 Linux 上 - 这意味着 gcc -Wall -Wextra -g .

那你应该使用调试器 (在 Linux 上为 gdb)并且可能使用 watchpoints .也许禁用 ASLR可能值得找到你的错误。

与最近的 GCC您也可以使用各种 -fsanitize=选项,特别是用 -fsanitize=address 编译. valgrind工具也可能非常有用。

关于c - 退出函数 C 时全局变量更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346651/

相关文章:

c - C 编译中的 “error: stray '\342 ' ” , “stray '\200 ' ” , “stray '\213 ' ”

c - 如何在 struct 中为 char* 字段分配内存

c - Qsort() 不适用于结构

c++ - 通过指向指针的指针访问结构元素的地址

c - DWARF - 如何在给定的二进制文件中找到函数的序言结束/结尾开始地址?

CS50 Mario Pyramid - 代码有效,但运行 check50 时仍然出现错误

c - 如何在c中分配结构体数组?

php - 在 PHP 中通过套接字读/写 C 数据结构

c - memmove 与复制单个数组元素

c - 二进制搜索指针动态内存分配递归