この問題に似ていると思われる多くの Q&A を読みましたが、まだ答えが見つかりませんでした: 次のfillbyte
ように、関数内の動的バイト配列にいくつかの割り当てを行う必要があります。
int Error;
result = fillbyte (&Error);
以下に示す行にコメントすると、すべて正常に動作します。ただし、その行が実行されると、この関数が 2 回目に呼び出されたときにアクセス違反の例外が発生しますが、最初にコードが正しく実行され、すべてがうまくいきます。このコード行または配列にパスワード バイトを入力する別の方法の問題を見つけることができないようです。
Bool fillbyte(int *Error)
{
byte BCC;
byte *Packet1 = new byte;
*Packet1 = 0x01;
*(Packet1+1) = 'P';
*(Packet1+2) = '1';
*(Packet1+3) = STX;
*(Packet1+4) = '(';
int add = sizeof(readingprops.password)*2;
for(int i=0;i<add;i++)
{
*(Packet1+(5+i)) = readingprops.password[i]; //this line raises the problem
}
*(Packet1+add+5) = ')';
*(Packet1+add+6) = ETX;
BCC = calc.CalcBCC(Packet1,add+7);
*(Packet1+add+7) = BCC;
SerialPort.Write(Packet1,add+8);
delete Packet1;
return true;
}
どんな助けでもいただければ幸いです