1

我有三个文件,TDS.c、TDS.h、ExtraRoutines.c,它们作为共享库一起编译。TDS.h 是头文件并定义变量。ExtraRoutines.c 负责内存分配,TDS.c 执行主要工作。变量 x0 在 TDS.h 中定义为double* x0,在 ExtraRoutines.c 中分配内存为

x0 = malloc(10 * sizeof(*x0));

在 TDS.c 的第一行,我调用 ExtraRoutines.c 来分配内存。内存分配正常执行,函数返回。使用gdb调试程序时出现问题。当我print x0[0]用来访问数据时,它说:

Cannot access memory at address 0x0

这意味着x0NULL。但我很确定这x0不是NULL因为,当我使用以下命令将数据保存x0到文件中时,会保存正确的值,这意味着x0存在并引用有效的内存地址。

FILE* fh = fopen("dump", "w");
for(k = 0; k < 10; k++)
{
    x0[k] = orgX0[k];
    fprintf(fh, "%f\n", x0[k]);
}
fclose(fh);

程序有bug,我需要通过分析数据找到bug。由于目前gdb没有显示任何全局变量,因此很难找到错误。因此,非常感谢您帮助查找问题并在 gdb 中显示全局变量(包括 x0)的值。谢谢

4

0 回答 0