C++ 隔离仅由C+中的特定代码使用的内存部分+;

C++ 隔离仅由C+中的特定代码使用的内存部分+;,c++,memory-management,undefined-behavior,peg,C++,Memory Management,Undefined Behavior,Peg,故事如下。 我正在玩,它有一个极好的语法来定义PEG语法,并且非常容易使用。我对它非常满意,直到我用生成的解析器得到了神秘的错误。 一些研究揭示了其中一个生成的助手函数中的问题: YY_LOCAL(void) yySet(yycontext *yy, char *text, int count) { yy->__val[count]= yy->__; } 此函

故事如下。 我正在玩,它有一个极好的语法来定义PEG语法,并且非常容易使用。我对它非常满意,直到我用生成的解析器得到了神秘的错误。 一些研究揭示了其中一个生成的助手函数中的问题:

YY_LOCAL(void) yySet(yycontext *yy, 
                     char *text, 
                     int count)   
               { yy->__val[count]= yy->__; }

此函数总是使用count调用。在同一程序中使用
malloc
/
free
new
/
delete
可以,只要您一致地使用它们:总是
free
a
malloc
ed指针,并且总是
delete
a
new
ed指针。
如果
计数为负数,则不是未定义的,只要它仍然指向正确类型的有效内存块内。(那里没有数组,只有一个指向
char*
)的指针@BoBTFish我知道这一点。解析器的代码与程序中的其他代码完全隔离,但在某些情况下我仍然看到干扰。我不知道为什么。无论如何,使用数组[-2]显然是自找麻烦,但这不是我的代码,我必须让它工作。@Mat是的,这是真的。然而,在某些情况下,我在该行中出现了内存损坏。@Semen Yesylevsky:这并不意味着该函数就是罪魁祸首。尝试使用valgrind。