- 指针越界
void test01(){
char buf[9] = "HelloWord";//数组大小应该设为10
printf("buf:%s\n",buf);//会出现乱码,字符串末位没有加\0
}
- 返回局部变量地址
char *getString()
{
char str[] = "HelloWorld"; //局部变量,栈区申请的空间
printf("getString_str = %s\n", str);
return str;
} //随着函数调用结束,栈区的空间会被释放
void test02()
{
char * str = getString();
printf("test_str = %s\n", str);
}
- 重复释放同一块内存空间
void test03()
{
char *p = malloc(sizeof(char) * 64);
free(p);
free(p);//重复释放
}
- 释放偏移后的指针
void test04()
{
char str[] = "hello world";
char *p = malloc(64);
for (int i = 0; i <= strlen(str); i++)
{
*p = str[i];
++p;
}//for循环执行完后,指针已经偏移至最后一个字母,并不指向字符串首地址
free(p);
}