次のコードを使用します。
typedef struct
{
char fileName[ 1024];
time_t deleteTime;
} file_item_t;
....
....
setEntry(char *fileName)
{
file_item_t file;
memset( &file, 0x00, sizeof( file_item_t ));
memcpy( file.fileName,
fileName,
sizeof( file.fileName ) - 1 );
...
...
関数が呼び出されると、SPARCマシンでは正常に実行されますが、Solaris10を実行しているi386でのsegfaultsは
fileName
約30文字のヌル文字で終了します。fileName
使用範囲を超えて読み取ろうとすると、memcpy()
一部のシステムでセグメンテーション違反が発生するようです。
これはレガシーコードであり、簡単に修正できます。しかし、私が知りたいのは、これが失敗するかどうかにつながる可能性のある根本的な特性についてです。スタックの読み取り違反に関連していますか?いくつかの境界交差?これはメモリセグメンテーションに関連しており、失敗するかどうかは偶然です(メモリセグメンテーション/ページングがメモリ管理とOSによってどのように行われるかによって異なります)。