gpt4 book ai didi

c - 为什么调用 execvp 时此 free 会失败?

转载 作者:行者123 更新时间:2023-11-30 14:30:16 25 4
gpt4 key购买 nike

首先,我在使用 Visual Studio 2008 编译的 Windows 32 位系统上以 C 语言运行。我在 Debug模式下运行。我的代码基本上是这样的:

execvp( *argv, argv );

其中 argv 具有三个条目,如下所示:

argv[0] = "pgserv";
argv[1] = "pgserv";
argv[2] = NULL;

是的,我知道这会以 pgserv 作为参数来调用 pgserv 应用程序,但它在命令行中工作得很好,并且是一种工件这是框架的一部分。

无论如何,当这条线被击中时,它会在dbgheap.c/_free_dbg_nolock()中触发这个断言

_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

调用堆栈顶部:

hub.exe!_free_dbg_nolock(void * pUserData=0x024c1408, int nBlockUse=1)  Line 1323 + 0x54 bytes  C++
hub.exe!_free_dbg(void * pUserData=0x024c1408, int nBlockUse=1) Line 1258 + 0xd bytes C++
hub.exe!free(void * pUserData=0x024c1408) Line 49 + 0xb bytes C++
hub.exe!_execve(const char * name=0x02523a10, const char * const * argv=0x02514e38, const char * const * envp=0x00000000) Line 322 + 0x8 bytes C
hub.exe!_execvpe(const char * filename=0x02523a10, const char * const * argvector=0x02514e38, const char * const * envptr=0x00000000) Line 87 + 0xc bytes C
hub.exe!_execvp(const char * filename=0x02523a10, const char * const * argvector=0x02514e38) Line 47 + 0xd bytes C
hub.exe!execmd(char * cmd=0x02523a10) Line 25 + 0xf bytes C

我完全不知道为什么我会在这里得到这个断言,因为我相信我正确地调用了 execvp() 并且这个代码被不同的 频繁调用>argv 成功。关于我的问题有什么想法/帮助吗?谢谢。

最佳答案

free 失败通常意味着以下两种情况之一:您尝试free 不是从 malloc 获取的指针code> (或者您已经释放的代码),或者堆已损坏。由于free 来自系统库,因此您的代码很可能之前已经损坏了堆,并且内存分配系统刚刚注意到。

由于您已经处于调试器中,因此请查看 0x024c1408 之前不久的对象。您可能溢出了那里的缓冲区。 (当然,您可能在调用 execvp 之前已经释放了有问题的对象,在这种情况下,该错误可能很难追踪。)

关于c - 为什么调用 execvp 时此 free 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3516646/

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