기초 지식의 메모리 관리 기초
4443 단어 메모리 관리
char a[]="hello";
a[0] = 'x';
cout<<a <<endl;
char *p = "world";// p , ,
p[0] = 'x';//
cout<<p<<endl;
메모리 용량 계산:
char a[]="hello world";
char *p = a;
cout<<sizeof(a)<<endl;//12
cout<<sizeof(p)<<endl;//4
void func(char a[100])
{
cout <<sizeof(a)<<endl;
}
바늘 파라미터는 어떻게 메모리를 전달합니까?만약 함수의 매개 변수가 바늘이라면, 이 바늘로 동적 메모리를 신청할 것을 기대하지 마라.다음 예에서 GetMemory는str가 원하는 메모리를 얻지 못했고str는 여전히null이다
void GetMemory(cha *p,int num)
{
p = (char*)malloc(sizeof(char)*num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str,100);
strcpy(str,"hello");
}
이런 상황을 처리하기 위해서 반드시 바늘 파라미터로 메모리를 신청해야 한다면, 반드시 '바늘을 가리키는 바늘' 으로 바꾸어야 한다
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
void Test2(void)
{
char *str = NULL;
GetMemory2(&str, 100);
// &str, str
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
free와 delete: 바늘 값의 메모리를 방출했을 뿐 i는 바늘 자체를 없애지 않았습니다.썼어야생 지침: 쓰레기 메모리를 가리키는 지침이다.주요 원인은 다음과 같다.
4
4
Obj *objects = new Obj[100]; // 100
Obj *objects = new Obj[100](1);// 100 1, 。
delete :
delete []objects; //
delete objects; // , delete objects[0], 99 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MRC 아래의 initWithFormat:과stringWithFormat:이 두 가지 방법은 같다.우리가 알아야 할 것은 어떻게 그들을 정확하게 사용하는가이다.initWithFormat는 새로운 alloc 실례에 호출되어야 하는 실례적인 방법입니다. 이것은 당신이 그것을 석방할 책임이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.