我想使用Python编写一个应用程序脚本,该应用程序将自己宣传为提供OLE组件.我应该如何开始?
我还不知道我需要在我将要访问的COMponents上调用哪些方法.我应该使用win32com来加载这些组件,然后开始在IPython中按'tab'吗?
我有相当大的程序(> 10k行的C++代码).从Visual Studio中启动时,它在调试模式或发布模式下都能正常工作,但是从命令行手动启动时,释放模式二进制文件通常会崩溃(并不总是!!!).
删除行会导致崩溃:
bool Save(const short* data, unsigned int width, unsigned int height,
const wstring* implicit_path, const wstring* name = NULL,
bool enable_overlay = false)
{
char* buf = new char[17];
delete [] buf;
}
Run Code Online (Sandbox Code Playgroud)
编辑:根据请求扩展了示例.
在我的测试用例中,"len"长度为16.没关系,如果我对buf做了一些事情,它会在删除时崩溃.
编辑:应用程序工作正常没有删除[]行,但我想它会泄漏内存(因为块永远不会被分配).删除行后从未使用的buf.它似乎也不会与除char之外的任何其他类型崩溃.现在我真的很困惑.
崩溃消息非常不明确(典型的Windows"xyz.exe已停止工作").当我单击"调试程序"选项时,它进入VS,其中错误被指定为"访问冲突写入位置xxxxxxxx".虽然"没有为任何堆栈帧加载符号",但无法找到错误的位置.
我想这是一个非常严重的堆损坏的情况,但如何调试这个?我应该寻找什么?
感谢帮助.
我想编写一个混合应用程序,它使用python作为GUI组件,C++模块作为后台服务.
我知道如何使用Python和C++编程,但我找不到一种成熟/好的方法来使它们顺利地协同工作.你能为我们解释一下吗?一个好的文档/教程也非常感谢.
在更改某些代码的过程中,我将一些函数溢出到多个文件中.我有文件controls.cpp,display.cpp我希望能够访问两个文件中的同一组变量.我不介意初始化或声明它们的位置,只要两个文件中的函数都可以使用它们.
当函数在同一个文件中时,这不是一个问题,但现在看来几乎不可能在一小时的谷歌搜索和尝试各种事情.
我正在构建一个文本解析器,std::string用作字符串的核心存储.
我知道这不是最优的,编译器内部的解析器使用优化方法.在我的项目中,我不介意失去一些性能以换取更清晰和更容易的维护.
一开始我在内存中读取了一个巨大的文本,然后我扫描每个字符以构建一组有序的标记,它是一个简单的词法分析器.目前我std::string用来表示令牌的文本,但我想通过使用引用/指针到原始文本来改进这一点.
根据我的阅读,返回并保持迭代器是一种不好的做法,引用std::string内部缓冲区也是一种不好的做法.
关于如何以"干净"的方式实现这一目标的任何建议?
我编写了一些代码来获取迭代器,但是必须按相反的顺序进行比较,
template<class ConstBiIter>
bool func(ConstBiIter seq_begin, ConstBiIter seq_end)
{
ConstBiIter last = std::prev(seq_end);
while (--last != std::prev(seq_begin)) // --> I need to compare the beginning data
{
......
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
在VS2013中,当在调试模式下运行时,--last != std::prev(seq_begin)将导致调试器断言失败并显示错误消息
Expression:string iterator + offset out of range.
Run Code Online (Sandbox Code Playgroud)
但是在Release模式下运行并给出正确的结果是完全可以的,因为在Released模式下没有边界检查.
我的问题是:
std::prev(some_container.begin())像哨兵一样使用安全some_container.rend()吗?
我怎么能直接比较一个reverse_iterator用iterator?如果我编写代码:
std::cout << (std::prev(some_container.begin())==some_container.rend()) << std::endl;它将无法编译,即使你是reinterpret_cast他们.
我很好奇,如果身体prev(some_container.begin())平等some_container.rend()吗?
使用constexpr-specified函数,foo_constexpr我的代码如下所示:
const auto x = foo_constexpr(y);
static_assert(x==0);
Run Code Online (Sandbox Code Playgroud)
在的声明x更改为的情况下,代码在什么情况下然后可能无法编译constexpr?(毕竟,x必须已经是用于中的常量表达式static_assert。)即:
constexpr auto x = foo_constexpr(y);
static_assert(x==0);
Run Code Online (Sandbox Code Playgroud) 在可读性和性能方面,我应该使用 为数组预分配内存吗[None]*n?分配一个空的[]并.append()反复使用是否算浪费?
int main()
{
clrscr();
char c[80],d[80];
cout<<"Enter a string = ";
cin.get(a,80);
strcpy(c,a);
strrev(a);
if(strcmp(c,a)==0)
cout<<"String = "<<c<< "is palindrome.";
else
cout<<c<<" is not palindrome";
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以有没有其他方法可以轻松地完成这项任务而不使用数组或以其他方式?
我想知道为什么在下面的程序中sizeof(int)返回一个不同的值sizeof(int*).
这是一个小程序:
int main(){
std::cout<<sizeof(int)<<endl;
std::cout<<sizeof(int*)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
4
8
Run Code Online (Sandbox Code Playgroud)
直到现在我记得整数指针的大小是4byte(gcc编译器).如何检查指针的正确大小?它依赖于计算机吗?
我正在运行ubuntu 12.04
# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 12.04 LTS
Release: 12.04
Codename: precise
Run Code Online (Sandbox Code Playgroud)
指针的大小是不是常量(标准大小)8个字节.