Прежде всего, я работаю в C на 32-битной системе Windows, скомпилированной с Visual Studio 2008. Я работаю в режиме отладки. Мой код по существу таков:
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
успешно. Любые идеи / помощь в том, что моя проблема? Спасибо.