Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Problem with std::map management
Forum Updated to NodeBB v4.3 + New Features

Problem with std::map management

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 4 Posters 882 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S SamiV123
    7 Apr 2024, 07:09

    @JonB said in Problem with std::map management:

    @BushyAxis793
    Run under debugger and see where the "out of range" comes from. Somewhere you are trying to access an element of a vector where the index is either below 0 or greater than the item count.

    Except that std::vector's index type is unsigned so you can't access below 0 and accessing the index at item count is already undefined.

    J Offline
    J Offline
    JonB
    wrote on 7 Apr 2024, 07:15 last edited by
    #5

    @SamiV123

    accessing the index at item count is already undefined.

    Meaning what? It will give std::out_of_range: vector. Which is what the user sees.

    I don't see why we disagreeing here. In general the way to see where such an error occurs is under a debugger.

    Yes, if there is no other code it may well be that oAutoCADVersionNumberMap = { is evaluated/executed before oAutoCADVersionNumberVector = { and that is the cause of the error. What harm does it do to check this under debugger?

    S 1 Reply Last reply 7 Apr 2024, 07:23
    1
    • S SamiV123
      7 Apr 2024, 06:58

      @BushyAxis793

      Are those global objects? The construction order is undefined.

      B Offline
      B Offline
      BushyAxis793
      wrote on 7 Apr 2024, 07:22 last edited by
      #6

      @SamiV123 Yes, global.

      S 1 Reply Last reply 7 Apr 2024, 07:26
      0
      • J JonB
        7 Apr 2024, 07:15

        @SamiV123

        accessing the index at item count is already undefined.

        Meaning what? It will give std::out_of_range: vector. Which is what the user sees.

        I don't see why we disagreeing here. In general the way to see where such an error occurs is under a debugger.

        Yes, if there is no other code it may well be that oAutoCADVersionNumberMap = { is evaluated/executed before oAutoCADVersionNumberVector = { and that is the cause of the error. What harm does it do to check this under debugger?

        S Offline
        S Offline
        SamiV123
        wrote on 7 Apr 2024, 07:23 last edited by SamiV123 4 Jul 2024, 07:24
        #7

        @JonB said in Problem with std::map management:

        @SamiV123

        accessing the index at item count is already undefined.

        Meaning what? It will give std::out_of_range: vector. Which is what the user sees.

        I don't see why we disagreeing here. In general the way to see where such an error occurs is under a debugger.

        Yes, if there is no other code it may well be that oAutoCADVersionNumberMap = { is evaluated/executed before oAutoCADVersionNumberVector = { and that is the cause of the error. What harm does it do to check this under debugger?

        actually the operator [] isn't required to be "safe".

        so therefore if you have

        std::vector<int> foo; foo[0];
        

        It's undefined behavior.

        I was just pointing out that you can't access an element at the index that equals the size of the vector since the last valid index is size - 1 so your comment was incorrect.

        J 1 Reply Last reply 7 Apr 2024, 07:37
        2
        • B Offline
          B Offline
          BushyAxis793
          wrote on 7 Apr 2024, 07:26 last edited by
          #8

          Gentlemen, I found a mistake. One of the vectors in another file had 204 instead of 205 elements. Sorry for the confusion. And thank you for your help!

          1 Reply Last reply
          0
          • B BushyAxis793
            7 Apr 2024, 07:22

            @SamiV123 Yes, global.

            S Offline
            S Offline
            SamiV123
            wrote on 7 Apr 2024, 07:26 last edited by
            #9

            @BushyAxis793 said in Problem with std::map management:

            @SamiV123 Yes, global.

            Yeah, don't do that.

            either make a function like this

            std::vector<int> MyVec() {
               static std::vector<int> foo {... };
              return foo;
            }
            

            or use global pointers and restructure your code not to rely on global object initialization.

            1 Reply Last reply
            2
            • B BushyAxis793 has marked this topic as solved on 7 Apr 2024, 07:26
            • S SamiV123
              7 Apr 2024, 07:23

              @JonB said in Problem with std::map management:

              @SamiV123

              accessing the index at item count is already undefined.

              Meaning what? It will give std::out_of_range: vector. Which is what the user sees.

              I don't see why we disagreeing here. In general the way to see where such an error occurs is under a debugger.

              Yes, if there is no other code it may well be that oAutoCADVersionNumberMap = { is evaluated/executed before oAutoCADVersionNumberVector = { and that is the cause of the error. What harm does it do to check this under debugger?

              actually the operator [] isn't required to be "safe".

              so therefore if you have

              std::vector<int> foo; foo[0];
              

              It's undefined behavior.

              I was just pointing out that you can't access an element at the index that equals the size of the vector since the last valid index is size - 1 so your comment was incorrect.

              J Offline
              J Offline
              JonB
              wrote on 7 Apr 2024, 07:37 last edited by JonB 4 Jul 2024, 07:41
              #10

              @SamiV123 said in Problem with std::map management:

              I was just pointing out that you can't access an element at the index that equals the size of the vector since the last valid index is size - 1 so your comment was incorrect.

              I don't know what you are on about or why you just seem to want to argue. Of course everyone knows "the last valid index is size - 1". My comment was not incorrect, I said just that. Are you quibbling over the fact that I wrote "or greater than the item count." when I could have written "greater than or equal to the item count." but didn't because I was trying to give the idea typing quickly, is that it? It doesn't matter whether you try to access [10] or [1000000] in a vector which has 10 elements, either one is "out of range". Why don't you actually try it and see whether you get uncaught exception of type std::out_of_range: vector instead of arguing semantics?

              OP writes

              One of the vectors in another file had 204 instead of 205 elements.

              Oh look, just what I said: trying to access an element one (or could have been more, but 1 here) beyond the number in a vector....

              S 1 Reply Last reply 7 Apr 2024, 07:45
              0
              • J JonB
                7 Apr 2024, 07:37

                @SamiV123 said in Problem with std::map management:

                I was just pointing out that you can't access an element at the index that equals the size of the vector since the last valid index is size - 1 so your comment was incorrect.

                I don't know what you are on about or why you just seem to want to argue. Of course everyone knows "the last valid index is size - 1". My comment was not incorrect, I said just that. Are you quibbling over the fact that I wrote "or greater than the item count." when I could have written "greater than or equal to the item count." but didn't because I was trying to give the idea typing quickly, is that it? It doesn't matter whether you try to access [10] or [1000000] in a vector which has 10 elements, either one is "out of range". Why don't you actually try it and see whether you get uncaught exception of type std::out_of_range: vector instead of arguing semantics?

                OP writes

                One of the vectors in another file had 204 instead of 205 elements.

                Oh look, just what I said: trying to access an element one (or could have been more, but 1 here) beyond the number in a vector....

                S Offline
                S Offline
                SamiV123
                wrote on 7 Apr 2024, 07:45 last edited by SamiV123 4 Jul 2024, 07:46
                #11

                @JonB said in Problem with std::map management:

                @SamiV123 said in Problem with std::map management:

                I was just pointing out that you can't access an element at the index that equals the size of the vector since the last valid index is size - 1 so your comment was incorrect.

                I don't know what you are on about or why you just seem to want to argue. Of course everyone knows "the last valid index is size - 1". My comment was not incorrect, I said just that. Are you quibbling over the fact that I wrote "or greater than the item count." when I could have written "greater than or equal to the item count." but didn't because I was trying to give the idea typing quickly, is that it? It doesn't matter whether you try to access [10] or [1000000] in a vector which has 10 elements, either one is "out of range". Why don't you actually try it and see whether you get uncaught exception of type std::out_of_range: vector instead of arguing semantics?

                OP writes

                One of the vectors in another file had 204 instead of 205 elements.

                Oh look, just what I said: trying to access an element one (or could have been more, but 1 here) beyond the number in a vector....

                I don't think everyone knows. It seems obvious that the OP is a newbie since if they weren't they would not have even posted this question.

                So therefore they might have gone off the rails thinking that accessing the element at an off by one index is actually safe.

                This is C++, you can't be "99%" correct you have to be 100% correct or your program is ill-defined. (which it always is anyway)

                Thats all, peace out.

                J C 2 Replies Last reply 7 Apr 2024, 07:47
                0
                • S SamiV123
                  7 Apr 2024, 07:45

                  @JonB said in Problem with std::map management:

                  @SamiV123 said in Problem with std::map management:

                  I was just pointing out that you can't access an element at the index that equals the size of the vector since the last valid index is size - 1 so your comment was incorrect.

                  I don't know what you are on about or why you just seem to want to argue. Of course everyone knows "the last valid index is size - 1". My comment was not incorrect, I said just that. Are you quibbling over the fact that I wrote "or greater than the item count." when I could have written "greater than or equal to the item count." but didn't because I was trying to give the idea typing quickly, is that it? It doesn't matter whether you try to access [10] or [1000000] in a vector which has 10 elements, either one is "out of range". Why don't you actually try it and see whether you get uncaught exception of type std::out_of_range: vector instead of arguing semantics?

                  OP writes

                  One of the vectors in another file had 204 instead of 205 elements.

                  Oh look, just what I said: trying to access an element one (or could have been more, but 1 here) beyond the number in a vector....

                  I don't think everyone knows. It seems obvious that the OP is a newbie since if they weren't they would not have even posted this question.

                  So therefore they might have gone off the rails thinking that accessing the element at an off by one index is actually safe.

                  This is C++, you can't be "99%" correct you have to be 100% correct or your program is ill-defined. (which it always is anyway)

                  Thats all, peace out.

                  J Offline
                  J Offline
                  JonB
                  wrote on 7 Apr 2024, 07:47 last edited by JonB 4 Jul 2024, 07:52
                  #12

                  @SamiV123 said in Problem with std::map management:

                  This is C++, you can't be "99%" correct you have to be 100% correct or your program is ill-defined. (which it always is anyway)

                  I will hold you to this in all your future posts, then ;-) [ <-- That's a wink! ]

                  For the record, I have edited my original post to be "100%" clear :)

                  1 Reply Last reply
                  1
                  • S SamiV123
                    7 Apr 2024, 07:45

                    @JonB said in Problem with std::map management:

                    @SamiV123 said in Problem with std::map management:

                    I was just pointing out that you can't access an element at the index that equals the size of the vector since the last valid index is size - 1 so your comment was incorrect.

                    I don't know what you are on about or why you just seem to want to argue. Of course everyone knows "the last valid index is size - 1". My comment was not incorrect, I said just that. Are you quibbling over the fact that I wrote "or greater than the item count." when I could have written "greater than or equal to the item count." but didn't because I was trying to give the idea typing quickly, is that it? It doesn't matter whether you try to access [10] or [1000000] in a vector which has 10 elements, either one is "out of range". Why don't you actually try it and see whether you get uncaught exception of type std::out_of_range: vector instead of arguing semantics?

                    OP writes

                    One of the vectors in another file had 204 instead of 205 elements.

                    Oh look, just what I said: trying to access an element one (or could have been more, but 1 here) beyond the number in a vector....

                    I don't think everyone knows. It seems obvious that the OP is a newbie since if they weren't they would not have even posted this question.

                    So therefore they might have gone off the rails thinking that accessing the element at an off by one index is actually safe.

                    This is C++, you can't be "99%" correct you have to be 100% correct or your program is ill-defined. (which it always is anyway)

                    Thats all, peace out.

                    C Offline
                    C Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on 7 Apr 2024, 07:51 last edited by
                    #13

                    @SamiV123 It's funny that you're arguing with 100% correct c++ here but advertising a proprietary way to link against libraries ('# pragma comment(lib, "ws2_32.lib")') in another thread.

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    S 1 Reply Last reply 7 Apr 2024, 07:51
                    0
                    • C Christian Ehrlicher
                      7 Apr 2024, 07:51

                      @SamiV123 It's funny that you're arguing with 100% correct c++ here but advertising a proprietary way to link against libraries ('# pragma comment(lib, "ws2_32.lib")') in another thread.

                      S Offline
                      S Offline
                      SamiV123
                      wrote on 7 Apr 2024, 07:51 last edited by SamiV123 4 Jul 2024, 07:53
                      #14

                      @Christian-Ehrlicher said in Problem with std::map management:

                      @SamiV123 It's funny that you're arguing with 100% correct c++ here but advertising a proprietary way to link against libraries ('# pragma comment(lib, "ws2_32.lib")') in another thread.

                      Yeah and that's completely orthogonal to this here.
                      Using a compiler specific way to link your program doesn't make it ill-defined (just possibly non portable).

                      C 1 Reply Last reply 7 Apr 2024, 08:09
                      0
                      • S SamiV123
                        7 Apr 2024, 07:51

                        @Christian-Ehrlicher said in Problem with std::map management:

                        @SamiV123 It's funny that you're arguing with 100% correct c++ here but advertising a proprietary way to link against libraries ('# pragma comment(lib, "ws2_32.lib")') in another thread.

                        Yeah and that's completely orthogonal to this here.
                        Using a compiler specific way to link your program doesn't make it ill-defined (just possibly non portable).

                        C Offline
                        C Offline
                        Christian Ehrlicher
                        Lifetime Qt Champion
                        wrote on 7 Apr 2024, 08:09 last edited by
                        #15

                        @SamiV123 said in Problem with std::map management:

                        just possibly non portable

                        Which contradicts the c++ idea.

                        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                        Visit the Qt Academy at https://academy.qt.io/catalog

                        S 1 Reply Last reply 7 Apr 2024, 08:18
                        0
                        • C Christian Ehrlicher
                          7 Apr 2024, 08:09

                          @SamiV123 said in Problem with std::map management:

                          just possibly non portable

                          Which contradicts the c++ idea.

                          S Offline
                          S Offline
                          SamiV123
                          wrote on 7 Apr 2024, 08:18 last edited by
                          #16

                          @Christian-Ehrlicher said in Problem with std::map management:

                          @SamiV123 said in Problem with std::map management:

                          just possibly non portable

                          Which contradicts the c++ idea.

                          Maybe so but that's not how real life works. In real life practically every C++ program is only as portable as the developers intended, i.e. it only compiles and runs on the platforms targeted by the developers.

                          1 Reply Last reply
                          0

                          14/16

                          7 Apr 2024, 07:51

                          • Login

                          • Login or register to search.
                          14 out of 16
                          • First post
                            14/16
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved