Announcement Announcement Module
Collapse
No announcement yet.
MCH3601 - Pointer not set for location referenced. Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • MCH3601 - Pointer not set for location referenced.

    Respond with a "D" to this message, and inspect the program dump. It may be of assistance. Dave

  • #2
    MCH3601 - Pointer not set for location referenced.

    Is the parm supposed to be in single quotes on the call? CALL PGM(CRMA20) PARM('00014729200604101816370001IH') Tom.

    Comment


    • #3
      MCH3601 - Pointer not set for location referenced.

      When you receive that message it is because you are calling the program without parameters. When you receive the message check the job to look at the call stack. Then find out which program has called CRMA20. That program is calling CRMA20 without parameters.

      Comment


      • #4
        MCH3601 - Pointer not set for location referenced.

        Thanks for all the suggestions! We've done some more research, and it seems that in every case where we get the pointer/parameter error, we are receiving an improperly formatted data queue entry from a server earlier in the program. We are still investigating, but we think it may be passing back data that is longer than the length of the message parameter. Why the program throws the error where it does is a mystery, but we think we can solve it by fixing the program that writes to the data queue.

        Comment


        • #5
          MCH3601 - Pointer not set for location referenced.

          I suspect that you have identified the source of your problem. From the QRCVDTAQ API documentation: 'If the length of this field (Data - your message parameter) is smaller than the value specified for the MAXLEN parameter on the Create Data Queue (CRTDTAQ) command, ... unexpected results can occur.' In addition to changing the program that writes the message, QRCVDTAQ was also enhanced a few releases back so that you can specify the number of bytes you have allocated for the message parameter (so you don't have the situation where the API is returning a message larger than the size of your parameter). This is the new 12th parameter - Size of data receiver.

          Comment


          • #6
            MCH3601 - Pointer not set for location referenced.

            1. Should "Size of data receiver" generally be the same as "Length of data" (the third parameter in the Required Parameter Group)? When would you want it to be different? 2. I found an archived entry from last August in which Tom Liotta writes: "In fact, since the maximum size of a data queue message from that data queue is longer than the largest possible CL variable, you probably should expect a problem sooner or later regardless of what messages are currently on the queue (unless you limit what the API returns)." He was referring to a message of 11721 bytes, and ours is 48117. Do you think it's worth making the change?

            Comment


            • #7
              MCH3601 - Pointer not set for location referenced.

              We have a program that occasionally gets the above error, for no apparent reason. It happens maybe once in 5000 CHAINS to a particular logical file. The file being CHAINed to has a four-part key, all alpha fields. Here is the full message from the job log: MCH3601 Escape 40 04/10/06 18:16:42.804136 QRNXIO QSYS *STMT QRNXIO From module . . . . . . . . : QRNXDBIO From procedure . . . . . . : _QRNX_DB_CHAIN Statement . . . . . . . . . : 6 To module . . . . . . . . . : QRNXDBIO To procedure . . . . . . . : _QRNX_DB_CHAIN Statement . . . . . . . . . : 6 Message . . . . : Pointer not set for location referenced. Cause . . . . . : A pointer was used, either directly or as a basing pointer, that has not been set to an address. Here is the program call: CALL PGM(CRMA20) PARM(00014729200604101816370001IH) IBM hasn't been able to help us with this. Does anyone have any suggestions as to where we should look?
              Code

              Comment


              • #8
                MCH3601 - Pointer not set for location referenced.

                I went ahead and added the parms, setting Size of Data Receiver to the same size as the Message parameter, and setting Error Code to 10A (leaving it blank). It worked; I no longer get the error. Thanks again!

                Comment


                • #9
                  MCH3601 - Pointer not set for location referenced.

                  acszimmy wrote: > > I went ahead and added the parms, setting Size of Data Receiver to the same size as the Message parameter, and setting Error Code to 10A (leaving it blank). It worked; I no longer get the error. Thanks again! If you leave the error code structure blank, it will have x'40404040' in the first 4 bytes; the API will interpret this as meaning the length of the error code structure is x'40404040' = 1077952576; the API would feel free to update that much storage. Eventually you will get a similar problem that you had before. You should set the error code to start with x'00000000'. By the way, the third parameter is an output parameter, set by the API to the actual length of the message. You don't need to set it before you call the API.

                  Comment

                  Working...
                  X