iT邦幫忙

0

輸入多筆資料後出現Segmentation fault

在輸入以下資料之后
5
Xman
Superman
Spiderman
Batman
Ironman
7
MakeFriend Xman Superman
MakeFriend Batman Superman
ListFriend Batman
ListFriend Ironman
MakeFriend Spiderman Superman
ListFriend Ironman
ListFriend Superman
本来應該輸出
Superman

Xman Batman Spiderman
但不知道為什麽出現了segmentation fault

以下是程式碼拜託了
#include
#include <string.h>
using namespace std;

struct person{

int index;

char name[21],names[21];

int list_of_friends[500];

int num_of_friend;

};

int main() {

string a,b,s;



int m,n,ans_number = 0;

cin >>m;

int i,j;

struct person persons [m];

for( i=0;i<m;i++){

    cin>> persons[i].name;

}

cin >>n;

struct person A[n],B[n],C[n];

int count1=0,count2=0;

for( i=0;i<n;i++){

    cin>> s;

    if(s=="MakeFriend"){

        cin>>A[count1].names>>B[count1].names;

        count1++;
       
    }

    if(s=="ListFriend"){

        cin>>C[count2].names;

        count2++;}

}



for(j=0;j<count2;j++){

    ans_number=0;

    for(i=0;i<count1;i++){
  
        if(strcmp(B[j].names,A[i].names)!=0 ){
 if(strcmp(C[j].names,A[i].names)==0 )

       {

           cout<<B[i].names<<" ";
          ans_number++;

       }

       else if (strcmp(C[j].names,B[i].names)==0){

           cout<<A[i].names<<" ";


           ans_number++;
       }}
 

    
    }
    cout<<endl;
}


return 0;

}

DanSnow iT邦研究生 5 級 ‧ 2021-03-11 00:25:26 檢舉
看來只有 A, B 這兩個陣列存的值的數量會一樣,沒有保證跟 C 一樣,但你跑過整個陣列時是用 A, B 的數量去跑,可能會存取 C 陣列沒有初始化的部份

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-03-11 09:20:20

只改第一列,改成#include <iostream>程式執行正常,如下圖
https://ithelp.ithome.com.tw/upload/images/20210311/20001787F8rUUVxCc4.png

至於 segmentation fault
我試出一種可能的原因
就是「stdin 沒有提供資料」時
https://ithelp.ithome.com.tw/upload/images/20210311/20001787qM9tsFeXDC.png

我要發表回答

立即登入回答