Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误-当前位置没有可用的源代码 当我试图调试一个在Linux机器上编写的C程序(现在,我使用Visual C++快件)时,我首先得到一个堆栈溢出错误。所以当我点击“继续”时,我收到了另一条错误消息_C++_C_Visual C++_Berkeley Db - Fatal编程技术网

错误-当前位置没有可用的源代码 当我试图调试一个在Linux机器上编写的C程序(现在,我使用Visual C++快件)时,我首先得到一个堆栈溢出错误。所以当我点击“继续”时,我收到了另一条错误消息

错误-当前位置没有可用的源代码 当我试图调试一个在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

访问冲突读取位置0x00030000

所以我决定一步一步地调试。因此,当我尝试它时,它会显示错误

当前位置没有可用的源代码

这个错误的原因是什么

代码

    #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


我用不同的函数名编写了相同的代码,从而解决了这个问题。这对我来说太奇怪了,因为它解决了我的问题。我不知道为什么。

我假设您获取了源代码并重新编译了它,并且没有使用交叉编译器或类似的东西。它的编码超过700行。:/不能放那些因为论坛只允许500人以上chars@mahesh,我试试看。我不知道该发哪一个,因为我是c的新手#如果1 while(1)#endif{fillList();#if 1{op_ds_bulk(ops,&total,1);temp=res(“bulk Write:,total,fp);index=0;}endifvoid op_ds_bulk(u_int ops,u_int*totalp,int update){char encode db[]=“encode”;如果(update){database_insert_bluk(list,ops);database_sync()*totalp=ops;}else{CHUNK prefetch[4096];int random=rand()%(h-ops+1);操作系统时钟(NULL,&starttime.secs,&starttime.usecs);数据库选择结束(65546,随机,预取,ops);操作系统时钟(NULL,&end_time.secs,&end_time.usecs);*totalp=ops;}}}哎哟!!!我不知道如何让你更容易地看到我的代码!!对不起!!!对不起如何检查调用堆栈和调试,我是C新手。有点晚了,但无论如何:如果你在调试模式下运行程序,并得到“找不到源代码”消息,调试器中应该有一个调用堆栈窗口,列出所有活动函数。只需滚动该窗口,直到找到您识别的函数。这应该是您在源代码中调用无源部件的位置。谢谢。事实上,当我跟踪它时,它会在进入上面第二行时立即显示错误!!!它不会显示错误我们甚至没有机会获得数据库的select end语句。当它输入**void op_ds_bulk(u_int ops,u_int*totalp,int update){**时会显示错误。