1.memset
void* memset(void* s,int c,size_t n);s:源操作数,c:填充的字符,n:需要设置的大小。返回值:s的首地址。
2.memcpy
void* memcpy(void* dst,const void* src,size_t n);dst:目标内存首地址,src:源内存首地址,n:需要拷贝的字节数。返回值:dst的首地址。
3.memmove
memmove和memcpy的功能和用法一样,区别在于,当dst,src地址重叠时,memmove仍可处理。
4.malloc
void* malloc(size_t size);在动态内存中分配一块长度为size字节的连续区域,所分配的内存空间内容不确定,一般使用memset初始化。
5.free
void free(void* ptr);释放所指向的一款内存空间,ptr是任意类型的指针变量,指向被释放区域的首地址。
6.calloc
void* calloc(size_t nmemb,size_t size);在内存中分配nmemb块长度为size字节的连续区域。calloc自动将分配的内存置0.返回值,成功,返回空间的起始地址,失败,返回NULL。
7.realloc
void* realloc(void* ptr,size_t size);重新分配用malloc或者calloc函数在堆区分配的内存的大小。如果指定的地址后面有连续的空间,那么久会在已有地址基础上增加内存,如果指定的地址后面没有空间,那么realloc会重新分配新的连续内存,把旧内存的值拷贝到新内存,同时释放旧内存。ptr之前的内存地址,如果ptr=null,那么realloc和malloc功能一致。size,重新分配的内存大小。返回值,成功,返回新分配的内存地址,失败,返回NULL。
注意:程序不能有内存泄漏,同一块内存也不能释放多次,不能操作野指针。
void fun(int *tmp)
{
tmp=(int*)malloc(sizeof(int));
*tmp=100;
}
int main()
{
int *p=NULL:
fun(p);
cout<<*p;//错误,操作野指针
return 0;
}
*****************************************************
void fun1(int *tmp)
{
*tmp=100;
}
int main()
{
int* p=NULL;
p=(int*)malloc(sizeof(int));
fun(p);
cout<<*p;//ok
if(p!=NULL)
free(p);
return 0;
}