错误-当前位置没有可用的源代码 当我试图调试一个在Linux机器上编写的C程序(现在,我使用Visual C++快件)时,我首先得到一个堆栈溢出错误。所以当我点击“继续”时,我收到了另一条错误消息
访问冲突读取位置0x00030000 所以我决定一步一步地调试。因此,当我尝试它时,它会显示错误 当前位置没有可用的源代码 这个错误的原因是什么 代码错误-当前位置没有可用的源代码 当我试图调试一个在Linux机器上编写的C程序(现在,我使用Visual C++快件)时,我首先得到一个堆栈溢出错误。所以当我点击“继续”时,我收到了另一条错误消息,c++,c,visual-c++,berkeley-db,C++,C,Visual C++,Berkeley Db,访问冲突读取位置0x00030000 所以我决定一步一步地调试。因此,当我尝试它时,它会显示错误 当前位置没有可用的源代码 这个错误的原因是什么 代码 #if 1 while(1) #endif { fillList(); #if 1 { op_ds_bulk(ops, &total, 1); temp = res("Bulk Write:", total, f
#if 1
while(1)
#endif
{
fillList();
#if 1
{
op_ds_bulk(ops, &total, 1);
temp = res("Bulk Write:", total, fp);
index = 0;
}
#endif
void op_ds_bulk(u_int ops, u_int * totalp, int update)
{
char encode_db[] = "encode";
if(update)
{
database_insert_bluk(list, ops);
database_sync();
*totalp = ops;
}
else
{
CHUNK prefetch[4096];
int random = rand() % (h-ops+1);
__os_clock(NULL, &start_time.secs, &start_time.usecs);
database_select_end(65546, random, prefetch, ops);
__os_clock(NULL, &end_time.secs, &end_time.usecs);
*totalp = ops;
}
}
}
无效访问可能发生在标准库代码中的某个位置。该版本的源代码在快速版中不可用
您可以检查调用库函数的代码部分的调用堆栈,然后从那里开始工作。不久前,我遇到了类似的问题,可能与您的问题有关 我在堆栈上有一个数组(你也有一个-
预回迁
),我不小心把它清除得太远(超出了数组的边界),删除了数组之外的任何信息
调用函数时,返回地址也存储在堆栈上(计算机必须知道从函数返回的位置)。因为我已经清除了那个,程序跳转到地址0x0和SEGFULT-ed下。调试时,我还收到一条消息“当前位置没有源代码”,因为“当前位置”是0x0,当然那里没有代码
所以我怀疑你在堆栈上的某个数组上越界了
通过查看您的代码,我发现了两件可疑的事情:
- 预取数组的大小为4096,但您可以使用参数65546调用
。也许它是好的(不知道该函数做什么),但也许它不是;)数据库_选择_end
- 65546不是2的幂。2^16=65536