程序在使用scanf时接收信号SIGSEGV

时间:2016-05-08 13:40:19

标签: c++ memory scanf sigsegv

我在C ++中使用算法,我试图通过将cin更改为scanf来加速执行。但是当我这样做时,我开始出现SIGSEGV错误。

    int main(){

    int nominal;
    int check;
    string b;
    int x;
    int a;

    int i = 0;

    //cin >> a;
    scanf ("%d",&a);
    for (int i = 0; i<a; i++){
        //cin >> b;
        scanf("%s",&b); 
        std::priority_queue < int > Q;
        std::priority_queue < int, std::vector < int >, std::greater < int > > moneyBox; 
        while (b!="0"){

代码在进入第一个时停止工作。有关如何解决它的任何提示?

1 个答案:

答案 0 :(得分:0)

scanf()使用与预定类型对应的格式字符。 "%s"用于在char数组中存储空终止的c字符串。因此,scanf()会将c ++字符串&b的地址误解为有效char*,指向预分配的足够大小的char数组。这会破坏内存并可能导致UB。