2021-04-28 语言二级指针的使用出现的问题

问题记录: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]);

开辟空间给使用,我只是把数据拷贝到这片空间,不会对原本空间的数据进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值