백준 1181번 문제 해결 중 자꾸만 Segfault 가 뜹니다

조회수 505회

segfault가 허용되지 않은 메모리에 접근하는 오류인 것은 알겠는데, 며칠동안 코드를 들여다보아도 찾아낼 수가 없습니다.. 코드가 더럽지만 봐주시면 감사하겠습니다..!!

#include <iostream>
#include <string>
using namespace std;

void dictionary(string* a, string* b)
{
    int len = a->length();

    for (int i = 0; i < len; i++)
    {
        string str1 = a->substr(i, 1);
        string str2 = b->substr(i, 1);
        if (str1 > str2)
        {
            string temp = *a;
            *a = *b;
            *b = temp;
            break;
        }
        else
            continue;
    }
}
void swap(string* a, string* b)
{
    string temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    int N;
    cin >> N;

    string str[50];
    for (int i = 0; i < N; i++)
        cin >> str[i];
    string* arr[50];
    for (int i = 0; i < N; i++)
        arr[i] = &str[i];

    while (true)
    {
        int counter = 0;

        for (int j = 0; j < N - 1; j++)
        {
            int len1 = arr[j]->length();
            int len2 = arr[j + 1]->length();
            if (len1 > len2)
            {
                counter++;
                swap(arr[j], arr[j + 1]);
            }
            else if (len1 == len2)
            {
                int count = 0;
                for (int k = 0; k < len1; k++)
                {
                    string str1 = arr[j]->substr(k, 1);
                    string str2 = arr[j + 1]->substr(k, 1);
                    if (str1 < str2)
                        break;
                    else if (str1 == str2)
                        continue;
                    else
                    {
                        count++;
                        break;
                    }
                }
                if (count == 0)
                    continue;
                else
                {
                    dictionary(arr[j], arr[j + 1]);
                    counter++;
                }
            }
            else
                continue;
        }
        if (counter == 0)
            break;
        else
            continue;
    }

    for (int i = 1; i < N; i++)
    {
        if (*arr[i - 1] == *arr[i])
            arr[i - 1] = NULL;
    }
    for (int i = 0; i < N; i++)
    {
        if (arr[i] != NULL)
            cout << *arr[i] << endl;
    }
    return 0;
}

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)