我有三个文件,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
表示x0
为NULL
。但我很确定x0
不是NULL
,因为当我使用以下命令将x0
的数据保存到文件中时,会保存正确的值,这意味着x0
1}}存在并引用有效的内存地址。
FILE* fh = fopen("dump", "w");
for(k = 0; k < 10; k++)
{
x0[k] = orgX0[k];
fprintf(fh, "%f\n", x0[k]);
}
fclose(fh);
该程序有一个错误,我需要通过分析数据找到错误。由于目前gdb
没有显示任何全局变量,因此很难找到错误。因此,有必要帮助找到问题并在gdb中显示全局变量(包括x0)的值。
感谢