我们在Windows 2003服务器上通过COM +运行本机C++应用程序.我最近从事件查看器中注意到它抛出异常,特别是C0000005异常,根据http://blogs.msdn.com/calvin_hsia/archive/2004/06/30/170344.aspx表示该过程试图写入不在其地址空间内的内存,即访问冲突.
事件查看器中的条目提供了一个调用堆栈:
LibFmwk!UTIL_GetDateFromLogByDayDirectory(char const*,class utilCDate&)+ 0xa26c LibFmwk!UTIL_GetDateFromLogByDayDirectory(char const*,class utilCDate&)+ 0x8af4 LibFmwk!UTIL_GetDateFromLogByDayDirectory(char const*,class utilCDate&)+ 0x13a1 LibFmwk!utilCLogController :: GetFLFInfoLevel(void )const + 0x1070 LibFmwk!utilCLogController :: GetFLFInfoLevel(void)const + 0x186
现在,我明白它给我的方法名称去看看,但我感觉每行末尾的地址(例如+ 0xa26c)试图指向我在该方法中的特定行或指令.
所以我的问题是:
编辑:根据要求,这是似乎导致问题的方法:
BOOL UTIL_GetDateFromLogByDayDirectory(LPCSTR pszDir, utilCDate& oDate)
{
BOOL bRet = FALSE;
if ((pszDir[0] == '%') &&
::isdigit(pszDir[1]) && ::isdigit(pszDir[2]) &&
::isdigit(pszDir[3]) && ::isdigit(pszDir[4]) &&
::isdigit(pszDir[5]) && ::isdigit(pszDir[6]) &&
::isdigit(pszDir[7]) && ::isdigit(pszDir[8]) &&
!pszDir[9])
{
char acCopy[9];
::memcpy(acCopy, pszDir + 1, 8);
acCopy[8] = '\0';
int …Run Code Online (Sandbox Code Playgroud) 我不久前写了一个程序(Mac OS X,C++,SDL,FMOD),它表现得相当不错.但最近我想扩展其功能并为其添加更多代码.现在,当我运行它并尝试测试新功能时,程序会与SIGABRT崩溃.
查看调试器,在函数堆栈上我看到:
据我所知,"__ stack_chk_fail"表示堆栈溢出.但这不是最奇怪的事情.在这个函数"odtworz"中,我有一些像这样的代码:
...
koniec = 0;
while ( koniec == 0 ) {
...
if (mode == 1) {
...
}
else if (mode == 2) {
...
}
else if (mode == 3) {
piesniOrkiestrowe[0] = '\0';
while ( piesniOrkiestrowe[0] == '\0' ) {
losowaPiesn();
char * piesnOrkiestrowa = szukajPiesniOrkiestrowej();
if ( piesnOrkiestrowa != NULL )
strcpy(piesniOrkiestrowe, piesnOrkiestrowa);
}
char nowyPiesnPlik[25];
sprintf(nowyPiesnPlik, "%sorch/%s", PIESNI_DIR.c_str(), piesniOrkiestrowe); …Run Code Online (Sandbox Code Playgroud) 一种新的树木和递归功能....
我知道如何创建堆栈以及如何创建递归函数的基础知识.
我正在进行预先排序的遍历搜索,当搜索的值与该节点的值匹配时,该搜索应返回树中节点的地址.
我在返回部分遇到问题...我试着在调用堆栈上读取一些东西......但我不明白如何实现它.它已经存在或者我必须制作这个堆栈吗?如果我必须制作它,我该如何制作这个堆栈?我读到它需要与树的高度成正比...是找到树高的最佳方法来制作另一个函数吗?
这是我到目前为止编写的一些代码:Tree和NodePtr是一个指向节点的指针......
NodePtr SearchTree(int v, Tree T)
{
//printf(" %i \n", T->value);
if(T->value == v)
{
return T;
}
else
{
if(T->Left != NULL) SearchTree(value, T->Left);
if(T->Right != NULL) SearchTree(value, T->Right);
}
return NULL;
}
Run Code Online (Sandbox Code Playgroud) 我只想更好地了解堆栈在地址空间中的含义(即您有代码/文本,堆,数据和堆栈)
基本上我的理解是堆栈包含局部变量,但是数据包含什么和堆栈包含什么之间的区别是什么?是不是数据变量?
如果程序对函数的递归调用a()是否意味着对于每个递归级别都有一个新的堆栈?
无论如何,我可以想象一个Android应用程序的调用堆栈?我在Eclipse中找到的只是运行线程:

我想要的是看看我的子程序是如何被调用的,以便调试与堆栈活动相关的问题.
谢谢!
我想问一下64位ubuntu Linux中的内存分配问题.
我有以下代码
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char buffer_one[8], buffer_two[8];
printf("Size of char: %u\n", sizeof(char));
printf("Buffer_two is at %p\n", buffer_two);
printf("Buffer_one is at %p\n", buffer_one);
}
Run Code Online (Sandbox Code Playgroud)
当它运行时,会显示以下结果
$ ./sizeofchar
Size of char: 1
Buffer_two is at 0x7fff98069910
Buffer_one is at 0x7fff98069900
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使char类型的大小是1字节,我假设(如果我在这里错了请纠正我)Buffer_two并且Buffer_one彼此相邻分配,为什么Buffer_two和Buffer_one内存地址分配16个字节.
当我运行在Eclipse中失败的JUnit时,我有时会得到类似于此的调用堆栈:
java.lang.NullPointerException
at com.a.b.c.d.e.MyTest.method(MyTest.java:73)
at com.a.b.c.d.e.MyTest.testConvertRawInternalAtomAllowCompound(MyTest.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
.... 57 more
Run Code Online (Sandbox Code Playgroud)
我怎样才能删除截止?我想看看整个调用堆栈.谢谢!
我正在尝试使用以下程序创建堆栈溢出运行时异常:
void f(int a) {
cout << a << ", ";
f(++a);
}
int main () {
f(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此程序时,我的计算机运行大约261824 call stack然后command terminated发生运行时错误.现在我想知道:
command terminated会出现错误?try,catch堆栈溢出异常?call stack?我有关于维基百科的访问链接,但我无法清楚地了解访问链接是什么以及它们与任何功能的返回地址有何不同.有人可以简要解释一下访问链接是什么以及为什么在调用堆栈上需要它?
在 Python 中,如果函数 A 调用函数 B,函数 B 调用函数 C,而函数 C 抛出一个 ValueError(作为示例),错误是否会沿着调用堆栈向上移动,从而函数 A 也抛出一个 ValueError?例如,我可以从函数 A 中的函数 C 中捕获值错误吗?
另外,如果您创建自己的仅在函数 C 中定义的异常,它是否也会上升到调用堆栈,以便函数 A 抛出相同的错误?