我将ACE/TAO作为一个组件添加到一个用C和c++编写的大型项目中。我从服务器收到一个。ior文件,在调用CORBA::ORB_init(argc, argv)
时使用。ior文件我构造了自己的argc和argv,如下所示
int argc = 2;
char *argv[2] = { 0 };
argv[0] = "-k";
argv[1] = "D:\IOR\test.ior";
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
当我调用ORB_init时,我得到一个"调试断言失败",它指向C:Program Files (x86)Windows Kits10Source10.0.17763.0ucrtheapdebug_heap.cpp line: 908
_ASSERTE(is_block_type_valid(header->_block_use));
CORBA::ORB_init在代码的很早就被调用了,所以不会有很多事情出错。我错过了什么明显的东西吗?
- 您得到了debug_heap中的断言所指示的堆损坏
- 当您在调试器中运行它时,您应该看到(Call Stack)在断言触发的地方,可能使您能够查明问题。
话虽如此,ORB_init(argc, argv)
应该获得C命令行参数并解析它们。这意味着argc
和argv
应该遵守这些参数的规则:
argc
一个整数,包含后面的参数计数argv。参数argc总是大于或等于1。
argv
一个以空结尾的字符串数组,表示命令行由程序用户输入的参数。按惯例,argv[0]
是用来调用程序的命令。argv[1]
是第一个命令行参数。命令行的最后一个参数是argv[argc - 1]
,且argv[argc]
总是NULL
。
试题:
int argc = 3;
char *argv[4];
argv[0] = "program";
argv[1] = "-k";
argv[2] = "D:\IOR\test.ior";
argv[3] = nullptr;