ファイルを1行ずつ1つの文字列にロードし、次にこのコードを使用してmemcpyのこの文字列を別の文字列ポインターにロードするCプログラムがあります。
typedef struct inmod_struct {
Int32 ReturnCode;
Int32 Length;
char Body[ROWSIZE];
} inmdtyp,*inmdptr;
inmdptr inmodptr;
char line[600];
int doit()
{
char *p;
p = inmodptr->Body;
ReadFile(); //reads a line of the file into **line** string variable
memcpy(p, line, strlen(line));
p += strlen(line);
inmodptr->ReturnCode = 0;
inmodptr->Length = p - inmodptr->Body;
reccnt++;
}
しかし、Windows XP SP3 マシンで上記のプログラムを実行すると、次のようなエラー メッセージ ボックスが表示されます。
"<メモリ アドレス>" の命令が "<メモリ アドレス>" のメモリを参照しました。メモリに「書き込み」できませんでした。[OK] をクリックして終了します....
同様の問題が発生している同様のメモリ操作を実行しようとしたときに、同様の問題に直面しました。strcpy は私にとって最適に機能しますが、strcpy は行の NUL 文字まで読み取りを省略しますが、行の NUL の後でも読み取られる文字がいくつかあります。誰でもこれに対する回避策または解決策を提供してください。
環境: Windows XP SP3、GCC コンパイラ。
同様のコードのコンパイルと使用をsolaris unixで試してみましたが、同じ問題に直面しています。
OpenCV Python、C サンプルの一部でも同様のエラーに直面しています。
編集:
申し訳ありません.. p = inmodptr->Body;
inmodptr で初期化されたポインタ p は構造体です。ポインターの初期化が問題ではないことを確認できます。明確にするために完全なコードを投稿