'std::out_of_range' what(): basic_string::substr: __pos

30,132

Solution 1

Here problem is with your substr() call. It looks like you are passing substr() parameter (Position of the first character to be copied as a substring) greater than string length.

If this parameter is greater than the string length, only then does it throw an out_of_range. exception which you are getting in your code.

To avoid this make sure you are passing valid value to substr() call.

Also, you should accept the input data first before performing this sorting/swapping operation else program may terminate after throwing exception.

For ex. your code needs the value of count at if statement to work properly.If you don't provide any value then it will take garbage value like 4195901 and if statement will throw following exception when i reaches to 12 (because songs is an array of 12 strings in your code):

terminate called after throwing an instance of 'std::length_error' what(): basic_string::_S_create Aborted

I hope this will help you.

Solution 2

Problem is in the song Home of the albumn Walk, Don't Run

Walk, Don't Run 
Released 1960
Genre    Instrumental rock, Surf
1. Morgen
2. Raunchy
3. Home //In this line song length is 4 ie. 0 to 3 
        //if you do substr(4) then it will throws 'std::out_of_range'.
        //So check the length of the song before substr().
Share:
30,132
Lightningzr
Author by

Lightningzr

Updated on January 09, 2020

Comments

  • Lightningzr
    Lightningzr over 4 years

    I'm writing a program for my class that'll sort a list of albums by the albums name and then the albums songs in alphabetical order. I'm getting the error 'std::out_of_range' what(): basic_string::substr: __pos (which is 4) > this->size() (which is 0). My teacher kind of just threw this at us without explaining much so I'm stuck. This is the code I have so far:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct album
     {
        string name;
        string release;
        string genre;
        string songs[12];
        int count;
     };
    
    int main()
     {
      album albums[4];
            for (int an = 0; an < 3; an++)
          {
                for (int i = 0; i < albums[an].count-1; i++)
                  {
    
                        if (albums[an].songs[i].substr(4) > albums[an].songs[i+1].substr(4))
                          {
                                swap (albums[an].songs[i], albums[an].songs[i+1]);
                          }
                  }
          }
    

    And the input data is a list of albums with the release date, genre, and songs:

    Walk, Don't Run 
    Released 1960
    Genre    Instrumental rock, Surf
     1. Morgen
     2. Raunchy
     3. Home
     4. My Own True Love (Tara's Theme)
     5. The Switch
     6. Walk, Don't Run
     7. Night Train
     8. No Trespassing
     9. Caravan
    10. Sleepwalk
    11. The McCoy
    12. Honky Tonk
    ================================== 
    Another Smash!!!  
    Released 1961
    Genre    Surf rock 
     1. (Ghost) Riders in the Sky (2:28)
     2. Wheels (1:55)
     3. Lonely Heart (2:10)
     4. Bulldog (2:20)
     5. Lullaby of the Leaves (1:58)
     6. Beyond the Reef (3:05)
     7. Raw-Hide (2:29)
     8. Meet Mister Callahan (2:20)
     9. Trambone (2:04)
    10. Last Date (2:13)
    11. Ginchy (1:40)
    12. Josie (2:04)
    ================================== 
    The Ventures Play Telstar and the Lonely Bull
    Released 1963
    Genre    Surf rock 
     1. Telstar (2:37)
     2. The Lonely Bull (2:11)
     3. Mexico (2:26)
     4. Calcutta (2:20)
     5. Apache (3:08)
     6. Never on Sunday (2:14)
     7. Tequila (2:44)
     8. Green Onions (2:05)
     9. Percolator (2:14)
    10. Red River Rock (2:15)
    11. Let There Be Drums (2:20)
    12. Last Night (2:29)
    ================================== 
    Hawaii Five-O 
    Released 1969
    Genre    Instrumental
     1. Hawaii Five-O (1:59)
     2. Lovin' Things (2:31)
     3. Galveston (2:40)
     4. The Letter (2:10)
     5. Don't Give in to Him (2:12)
     6. Theme from A Summer Place (2:16)
     7. Medley: Spooky/Traces/Stormy (4:25)
     8. Medley: Aquarius/Let the Sunshine In (2:49)
     9. Games People Play (2:46)
    10. I Can Hear Music (2:37)
    11. Dizzy (2:31)