memset関数クリア境界問題

955 ワード

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; }