使用以下代码:
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 机器上运行正常,但在运行 Solaris 10 的 i386 上出现
段错误fileName
。假设是一个以空字符结尾的字符串,大约 30 个字符。似乎尝试读取超出使用范围fileName
会memcpy()
触发某些系统上的分段错误。
它是遗留代码,易于纠正。但我想知道的是可能导致失败与否的潜在特征。它与堆栈上的读取冲突有关吗?一些跨界?它与内存分段有关,它是否只是偶然的情况(取决于内存管理和操作系统如何完成内存分段/分页。)它可能会失败。