INT_MAX是一个很大的数,没有足够的空间,所以malloc返回一个空指针
int main()
{
int* p = (int*)malloc(40);
if (p == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//方式
int i = 0;
for (i = 0; i <= 10; i++)
{
p[i] = i;
}
free(p);
p = NULL;
return 0;
}
int main()
{
int a = 10;
int* p = &a;
free(p);
p = NULL;
return 0;
}
int main()
{
int* p = (int*)malloc(40);
if (p == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//使用
int i = 0;
for (i = 0; i < 10; i++)
{
*p = i;
p++;
}
free(p);
p = NULL;
//释放
return 0;
}
int main()
{
int* p = (int*)malloc(40);
free(p);
free(p);
return 0;
}
void test()
{
int* p = (int*)malloc(100);
if (NULL != p)
{
*p = 20;
}
return 0;
}
int main()
{
test();
while (1);
}
忘记释放不再使用的动态开辟的空间会造成内存泄漏。
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行Test 函数会有什么样的结果?
str作为形参传入到GetMemory函数里面,创建了一块100字节的空间给p,出作用域以后p销毁了,str仍然是空指针,导致strcpy的时候会崩溃(strcpy进行实现时需要解引用前面一个参数)
修改:传地址,GetMemory传入&str,用char** p 的二级指针接收这个地址
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
调用GetMemory后,返回p原来指向hello world的地址,但是出作用域以后p被销毁,GetMemory传过来的是一块未知的区域的首地址
void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test 函数会有什么样的结果?
代码设计还算合理,但是没有
free(str);
str = NULL;
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, "hello");
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
请问运行Test 函数会有什么样的结果?
解引用了野指针