内存分配问题
(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,
这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,
函数执行结束时这些存储单元自动被释放。
栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,
程序员自己负责在何时用free 或delete 释放内存。
动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
//error
void GetMemory(char **p1)
{
//p in stack
char *p = (char*)malloc(100);
p1 = &p;
if(*p1 == NULL)
{
printf(" in error int 22 null\n");
}
}
void GetMemory2(char **p1)
{
*p1 = (char*)malloc(10);
}
void GetMemory3(char **p1)
{
*p1 = (char*)new char[10];
}
// error p
char *GetMemory4(void)
{
char *p = "hello ";
return p;
}
//error
char * GetMemory1(char *p)
{
return p = (char*)malloc(100);
}
void test()
{
char *s =NULL;
GetMemory(&s);
if(s == NULL)
{
printf("error s null\n");
}
strcpy(s,"hello");
printf(s);
printf("\n");
}