memset関数クリア境界問題
955 ワード
memsetの関数の説明は次のとおりです.
従ってmemset関数は、付与時にユーザが指定した長さに基づいて、初期アドレスの後の指定された長さの空間に付与される.与えられた長さが実際に値を付与したい区間を超えていると、境界を越えた問題が発生し、メモリ領域の後のアドレスデータに影響し、プログラム異常を引き起こす.
したがって、指定された付与長さについては必ず境界を越えないことを確保し、配列構造体などの初期化には
簡単な例:
NAME
memset - fill memory with a constant byte
SYNOPSIS
#include
void *memset(void *s, int c, size_t n);
DESCRIPTION
The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.
RETURN VALUE
The memset() function returns a pointer to the memory area s.
従ってmemset関数は、付与時にユーザが指定した長さに基づいて、初期アドレスの後の指定された長さの空間に付与される.与えられた長さが実際に値を付与したい区間を超えていると、境界を越えた問題が発生し、メモリ領域の後のアドレスデータに影響し、プログラム異常を引き起こす.
したがって、指定された付与長さについては必ず境界を越えないことを確保し、配列構造体などの初期化には
sizeof
関数を推奨する.簡単な例:
#include
#include
char ss[1024];
char ss_s[1024];
int main()
{
printf("ss addr:%p ss_s addr:%p
", ss, ss_s);
memset(ss,'Q',1000);
printf("%s
", ss);
memset(ss_s,0,3000);
printf("%s
", ss);
return 0;
}