问题记录:C语言二级指针的使用出现的问题
先看错误代码:
char* paper_list[] =
{
"123",
"234",
"345",
"456",
0 };
int main()
{
char** p = NULL;
p = (char**)malloc(sizeof(char *)*5);
for (int i = 0; i < 5; i++)
{
p[i] = (char*)malloc(sizeof(char) * 100);
}
for (int i = 0; i <4; i++)
{
p[i] = paper_list[i]; //错误的代码块
}
for (int i = 0; i < 4; i++)
{
printf("p[%d]=%s\n", i, p[i]);
}
for (int i = 0; i < 4; i++)
{
free(p[i]);
p[i] = NULL;
}
free(p);
p = NULL;
system("pause");
return 0;
}
打印数据:
p[0]=123
p[1]=234
p[2]=345
p[3]=456
这个地方该打印的还是能打印出来,但是你在free的时候就会报错,因为你free掉的是paper_list这个指针数组,这是一个全局定义的,全局变量存放在静态存储区,你静态存储区是不能被释放的。
所以开辟动态空间就完全失去了意义
修正:strcpy(p[i], paper_list[i]);
开辟空间给使用,我只是把数据拷贝到这片空间,不会对原本空间的数据进行操作。