gpt4 book ai didi

c++ - 调用库时崩溃

转载 作者:搜寻专家 更新时间:2023-10-31 00:49:25 26 4
gpt4 key购买 nike

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

我有一个测试程序:

#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 值。随后对进程的两个不同成员函数的调用(未包含在示例中)也运行良好。但是第二个成员函数由于缓冲区溢出调用了垃圾内存,并清零了进程。

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

问题可以作为“不再相关”而关闭。无论如何谢谢!

最佳答案

如果:

LibProcess * process = createLibProcess();

返回 NULL,或以某种方式无效的进程,您将得到您所看到的准确行为。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com