int main()
{
int n = 5;
//int* ip = (int*)malloc(4 * 5);
int* ip = (int*)malloc(sizeof(int));
if (ip == nullptr) exit(EXIT_FAILURE);
for (int i = 0;i < n;++i)
{
ip[i] = i + 10;
}
for (int i = 0;i < n;++i)
{
printf("%5d", ip[i]);
}
free(ip);
ip = nullptr;
return 0;
}
内存泄漏
1.指针丢失 malloc内存无法返回
2.堆区内存空间耗尽
malloc内部申请空间越小 空间利用率越低
malloc(1):头部信息 28字节 上越界 4字节 申请空间 1字节 下越界 4字节 部分标记信息 未知
malloc(0):并非返回空指针!
头部信息 28字节 上越界 4字节 申请空间 0字节 下越界 4字节 部分标记信息 未知
char* GetString(char* p, int n) //改错题法一
{
p = (char*)malloc(sizeof(char) * n);
return p;
}
int main()
{
int n = 100;
char* cp = NULL;
cp=GetString(cp, n);
strcpy_s(cp,n, "hello tulun");
printf("%s\n", cp);
free(cp);
return 0;
}
void GetString(char*&p, int n) //改错题法二
{
p = (char*)malloc(sizeof(char) * n);
return p;
}
int main()
{
int n = 100;
char* cp = NULL;
GetString(cp, n);
strcpy_s(cp,n, "hello tulun");
printf("%s\n", cp);
free(cp);
return 0;
}