小编iam*_*sgt的帖子

为什么我得到一个无效的指针?

我正在为家庭作业写一个回溯问题,除了我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完整文件:

Assg4.cc

backtrack.cc&backtrack.h

c++ free pointers glibc

1
推荐指数
1
解决办法
110
查看次数

为什么我在cin上遇到段错误?

我正在写一个相当简单的练习(家庭作业),并且大多数都有效,但是有时会在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。每一次。为什么?

c++ cin segmentation-fault

1
推荐指数
1
解决办法
5242
查看次数

为什么这个正则表达式在测试时匹配,而不是在perl中?

我有一个正则表达式,我需要确定某些函数类型是否在文件中.像这样:

$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)

regex perl grep

0
推荐指数
1
解决办法
105
查看次数

标签 统计

c++ ×2

cin ×1

free ×1

glibc ×1

grep ×1

perl ×1

pointers ×1

regex ×1

segmentation-fault ×1