Mr.horse

Results 3 issues of Mr.horse

下面是调试输出的信息: “Project4.exe”(Win32): 已加载“C:\Users\jhaom\source\repos\Project4\Debug\Project4.exe”。已加载符号。 “Project4.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。已加载符号。 “Project4.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。 “Project4.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。已加载符号。 “Project4.exe”(Win32): 已加载“C:\Windows\SysWOW64\vcruntime140d.dll”。已加载符号。 “Project4.exe”(Win32): 已加载“C:\Windows\SysWOW64\ucrtbased.dll”。已加载符号。 线程 0x11490 已退出,返回值为 0 (0x0)。 HEAP[Project4.exe]: Invalid address specified to RtlValidateHeap( 01210000, 01214F88 ) Project4.exe 已触发了一个断点。

static void lept_stringify_value(lept_context* c, const lept_value* v) { case LEPT_NUMBER: c->top -= 32 - sprintf(lept_context_push(c, 32), "%.17g", v->u.n); break; 这一句不能优化,因为c->top = 0; c->top -= 32 - sprintf()在这个情况下等价于 c->top = 0...

第一,感谢作者给我们提提供这么好的库。 第二,05_answer出现bug的地方是 assert(top==0)。 第三,顺着该思路,我发现,解析数组错误后,堆栈的top不会指向原来初始的位置。 第四,所以我自己手动加了一个 head,然后在返回之前,令c.top = head 第五,这个和作者的解决方法虽然不一样,但是也能解决问题。 问题:05_answer的第五条:bug解释。这个bug的起因是作者认为每次push的时候,会留下一个指向堆内存的指针,但是实际的情况是,代码中并没有一个这样的指针。 所以我不能清楚的明白问题出在哪?