我正在为家庭作业写一个回溯问题,除了我delete[]的最后,所有代码都有效.
/*Assg4.cc*/
int main()
{
//removed irrelevant code - see pastebin links if needed
void *data = &datavector;
bool finished = false;
bool* continuance = &finished;
int *a = new int[n+1];
for(int i=0; i<n; i++)
{
a[i] = NULL;
}
delete []a;
delete continuance;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
***glibc检测到***./Assg4:free():无效指针:0xbfc7098f***
该函数在某些时候backtrack()仅填充数组的内容a[],它不会以任何方式删除,扩展或收缩数组.我知道问题在于最后的删除,因为当我将它们注释掉时,我没有得到任何错误(并且所有计算的结果都是正确的).我究竟做错了什么?
Pastebin完整文件:
我正在写一个相当简单的练习(家庭作业),并且大多数都有效,但是有时会在cin上出现段错误。这是相关的代码。
int main()
{
std::string str = "";
std::cout << "Please select the desired operation:\n";
std::cout << "(A): Generate Decompositions\n";
std::cout << "(B): Generate Acceptable Compositions from S1.txt and S2.txt\n";
std::cout << "cout"; //debug statement
std::cin >> str;
std::cout << "cin"; //debug statement
std::cout << str;
char resp = str.at(0);
std::cout << "resp"; //debug statement
...
}
Run Code Online (Sandbox Code Playgroud)
我遇到了段错误std::cin >> str(我知道这是因为输出了“调试语句”)。但是奇怪的是,我只有在输入'b'时才能得到它。如果我输入“ a”或任何以“ a”开头的单词,则可以正常工作。如果我输入a或b以外的任何字母,或以a或b以外的其他字母开头的任何东西,它就会退出(如预期的那样)。但是,如果我输入“ b”或任何以“ b”开头的单词,则会出现Segfaults。每一次。为什么?
我有一个正则表达式,我需要确定某些函数类型是否在文件中.像这样:
$stringsetexists = grep {/void [s|S]et[\w]+\(\s*.*string/} <$fh>;
Run Code Online (Sandbox Code Playgroud)
这是从perl文件运行,尝试匹配.cpp文件中的以下函数:
void setChanName(const std::string & chanName)
void setChanNameFont(const std::string & font)
void setOSDMessage(const std::string & osdMessage)
void setOSDMessageFont(const std::string & font)
Run Code Online (Sandbox Code Playgroud)
当我void [s|S]et[\w]+\(\s*.*string 通过正则表达式测试程序(例如www.regextester.com)运行正则表达式(输入为:)时,所有这些匹配(是的,我知道它们只匹配"字符串"的结尾.这就是我想要的).
但是,当我在perl脚本中运行上述命令时,它找不到匹配项.我知道脚本正在打开文件,所以这不是问题.我知道perl脚本中的其他正则表达式.问题是什么?
编辑:混淆问题,以下正则表达式:
$stringsetexists = grep {/inline void [s|S]et[\w]+\(\s*.*string/} <$fh>;
Run Code Online (Sandbox Code Playgroud)
在包含如下所示的行的文件上运行时工作得很好:
inline void setIPv6Address(const std::string & ipv6Address)
Run Code Online (Sandbox Code Playgroud)
(并非正则表达式中唯一的区别是在"void"之前添加了"inline".文件中唯一的区别是在"void"之前添加了"inline".
编辑2:扩展我已经放置的内容,相关的代码块在这里:
open $fh, "<", $file;
$stringsetexists = grep {/inline void [s|S]et[\w]+\(\s*.*string/} <$fh>; #this works for all files that contain "inline void"
if ($file eq "OSDSettings.h") …Run Code Online (Sandbox Code Playgroud)