c++ - 调用库时崩溃

标签 c++

希望我能在不遗漏关键细节的情况下简化它......

我有一个测试程序:

#include <lib.h>

const char * INPUT  = "xyz";

int main()
{
    initializeLib();
    LibProcess * process = createLibProcess();
    fprintf( stderr, "Before run(%s)\n", INPUT );
    process->run(INPUT);
    fprintf( stderr, "After run(%s)\n", INPUT );
    return 0;
}

这个测试程序我编译(gcc 4.1.2)并运行为:

g++ -g -o test test.c -L /path/to/lib -I /path/to/include -lnameoflib
export LD_LIBRARY_PATH=/path/to/lib
./test

这个库相当复杂,在某些地方不太智能,最重要的是不是我写的,所以不要因为所涉及的功能的架构而责怪我:

class ProcessBase
{
    public:
        virtual int run( const char* buffer = NULL ) = 0;
}

class LibProcess : ProcessBase
{
    public:
        LibProcess()
        {
            fprintf( "Reached LibProcess().\n" );
        }

        int  run( const char* buffer = NULL )
        {
            fprintf( stderr, "Reached run().\n" );
        }
};            

void initializeLib()
{
    // Preparing some data
}

ProcessBase * createLibProcess()
{
    ProcessBase * process = new LibProcess();
    fprintf( stderr, "Created Process.\n" );
    return (ProcessBase *) process;
}

到目前为止,一切都很好。但它的输出确实让我困惑:

Reached LibProcess().
Created Process.
Before run(xyz)

SEGFAULT

我知道错误(很可能)是在完全不同的地方。但是这怎么可能呢?

我会理解测试是否在第一次调用库时失败。我会理解测试是否在创建进程时终止,或者当它实际上在 run() 中执行某些操作时终止。

但是在调用函数和实际到达该函数之间它怎么会死掉呢?

我一无所知,尤其是我不知道如何继续调试这个。帮忙?

编辑:是的,我在 createLibProcess() 之后检查了进程是否有非 NULL 值。随后对 process 的两个不同成员函数的调用(未包含在示例中)也运行得很好。但是第二个成员函数调用由于缓冲区溢出而破坏了内存,并将进程清零。

这使得问题无效。 当然调用 NULL->run() 是一种段错误。

问题可以作为“不再相关”而关闭。不管怎样,谢谢!

最佳答案

如果:

LibProcess * process = createLibProcess();

返回 NULL,或者进程在某种程度上无效,您将得到与您所看到的完全相同的行为。

关于c++ - 调用库时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305132/

相关文章:

c++ - 使用 boost::hana 传递反射

c++ - 在 FTP 服务器中正确实现 LIST 命令

为多个体系结构编译时的 C++ 多个函数定义

c++ - 如何将 ostream_iterator 的输出转换为字符串?

c++ - 从 QFile 获取句柄

c++ - 碰撞不一致

c++ - MFC 应用程序的退出函数在哪里?

c++ - 成员初始化的循环依赖

C++如何删除垂直滚动条?

c++ - 'extern' 关键字有问题