none
dizin, dizi sınırlarının dışındaydı hatası

    Soru

  • ne yaptıysam bulamadım arkadaşlar sürekli dizin dizi sınırlarının dışındaydı hatası veriyor. kodları da ekleyeyim yardımcı olursanız sevinirim.

     #region HOLDING REGISTER OKUMA
                    if (dataRcvCnt == 23 && dataRcv[1] == 3 && crc16.getCrc16(dataRcv, 21) == dataRcv[21] * 256 + dataRcv[22])
                    {
                        COMErrCnt[panelCnt] = 0;
                        OkCOM[slaveid[panelCnt]] = true;
                        for (int i = 1; i < 9; i++)
                        {
                            holdingRegister[slaveid[panelCnt], (subID - 1) * 9 + i] = (dataRcv[2 * i + 3] * 256 + dataRcv[2 * i + 4]);
                        }
                        holdingRegArray();
                    }


                    ///likit için 
                    else if (dataRcvCnt == 19 && slaveid[panelCnt] == (dataRcv[3] * 256 + dataRcv[4]) &&  dataRcv[1] == 3 && crc16.getCrc16(dataRcv, 17) == dataRcv[17] * 256 + dataRcv[18])
                    {
                        COMErrCntLKD[slaveid[panelCnt]] = 0;
                        OkCOM[slaveid[panelCnt]] = true;

                        //holdingRegister[slaveid[panelCnt], 0] = dataRcv[3] * 256 + dataRcv[4]; //ID
                        //holdingRegister[slaveid[panelCnt], 1] = dataRcv[5] * 256 + dataRcv[6]; //BR
                        holdingRegister[slaveid[panelCnt], 0] = dataRcv[7] * 256 + dataRcv[8]; //tank1
                        holdingRegister[slaveid[panelCnt], 1] = dataRcv[9] * 256 + dataRcv[10]; //tank2
                        holdingRegister[slaveid[panelCnt], 2] = dataRcv[11] * 256 + dataRcv[12]; //tank3
                        holdingRegister[slaveid[panelCnt], 3] = dataRcv[13] * 256 + dataRcv[14]; //tank4
                        holdingRegister[slaveid[panelCnt], 4] = dataRcv[15] * 256 + dataRcv[16]; //tank5
                        holdingRegArray();
                    }
                    #endregion


    • Düzenleyen bobo52 22 Mayıs 2019 Çarşamba 06:14
    22 Mayıs 2019 Çarşamba 05:53

Tüm Yanıtlar

  • Bu kodda hemen hemen her satir o hatayı verme potansiyeline sahip. Debugger kullanarak hatayı aldiginiz yerde dizin boyutunu ve kullandiginiz indexi kontrol edin.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.

    22 Mayıs 2019 Çarşamba 10:19
    Yanıtlayıcı
  • teşekkür ederim yanıt için, hatalı kod 

      { 
                            holdingRegister [slaveid [panelCnt], (altID - 1) * 9 + i] = (dataRcv [2 * i + 3] * 256 + dataRcv [2 * i + 4]); 
                        } 

    başkasının yazığı kod olduğu için düzeltemiyorum, bu , kartla haberleşen bir otomasyon sistemi yazılımı


    dede




    • Düzenleyen bobo52 24 Mayıs 2019 Cuma 06:13
    24 Mayıs 2019 Cuma 06:10
  • teşekkür ederim yanıt için, hatalı kod 

      { 
                            holdingRegister [slaveid [panelCnt], (altID - 1) * 9 + i] = (dataRcv [2 * i + 3] * 256 + dataRcv [2 * i + 4]); 
                        } 

    başkasının yazığı kod olduğu için düzeltemiyorum, bu , kartla haberleşen bir otomasyon sistemi yazılımı


    dede




     Bir kardiyovasküler cerrahi uygulamasının kodunun bize bir şeyler ifade etmeyeceği gibi. Bundan bizim de bir şey anlamamız mümkün değil. Tek söyleyebileceğimiz slaveid , holdingRegister , dataRcv'dan birisinde (hata veren yeri tam olarak göstermediğiniz için hepsini saymak gerekti) olmayan bir indise erişilmeye çalışıyor. 5 elemanlı bir kümenin 6. elemanına erişmeye çalışmak ile aynı durum.

    Siz bunu nasıl anlayacaksanız, bu satıra bir "break point" koyacaksınız, ve watch ekranından veya değişkenlerin üzerine mouse imleci ile gelip boyutlarını kontrol edeceksiniz. Bu dizilerden hata verenin boyutu 0 ise verinin gelmediğini düşünebilirsiniz, diğer durumlarda ise gelen veri kodlandığı zamanki gibi değil. Belki cihaza güncelleme gelmiştir? Fakat farklı değer geliyorsa bunu anlamanın en doğru yolu cihazın teknik dokümanlarından geçer.


    www.cihanyakar.com

    24 Mayıs 2019 Cuma 08:18