我今天在面试时被问到这个问题。不幸的是,我不确定我是否在这里正确地复制了它。我只记得,我不太理解它。问题可能是
"What problems can loading statically and dynamically compiled dlls cause?"
我不知道答案,但面试官告诉我至少有两个主要问题:
运行时库:可能存在一些不兼容的内存分配和取消分配。
不幸的是,我们在这里被打断了,我们没有回到这个问题。
请您帮我理解这个问题可能是什么,以及答案是什么?
第一点我也不太明白。我以为程序中只能有一个 malloc
,我错了吗?
最佳答案
假设 A.dll 与标准库版本 1.0 静态链接。它有一个如下所示的函数:
char * f() {
return malloc( 100 ); // uses malloc 1.0
}
现在假设有另一个库 B.dll 与 A.dll 动态链接,并与标准库版本 1.1 静态链接。它有一个如下所示的函数:
void g() {
char * p = f(); // returns the result of malloc 1.0
free( p ); // uses free 1.1
}
然后,您可能(我说“可能”是因为这些都不是标准化的)有一个使用标准库 1.0 动态分配的指针,但在版本 1.1 中释放了该指针。这通常会导致严重且难以诊断的问题。
关于c++ - 将静态库和动态库链接到同一个可执行文件会导致什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989605/