char **二维指针很险恶

本文通过一个具体的C语言指针使用案例,展示了不当的内存分配和释放可能导致的问题。文章深入剖析了一个因内存分配不当而导致段错误的例子,并强调了良好编程习惯的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用到指针的时候,一定要注意,否则被它整死了都死的不明不白的!

void SetInputParam(int arga,char ***argv)
{
	int index=0,i;
	char buffer[32]={0};
	(*argv) = (char **)malloc(sizeof(char) * arga);
	for (i=0;i<arga;i++)
	{
		printf(" ---- %d ------> arga= %d\n",i,arga);
		(*argv)[i] = (char*)malloc(sizeof(char) *24);
		memset((*argv)[i],0x0,24*sizeof(char));
	}	
}
void main()
{
	int arga=5,i;
	char **argv;
	SetInputParam(arga,&argv);
	for (i=0;i<arga;i++)
	{
		printf("  %2d ---> %s\n",i,argv[i]);
	}
	printf("   ------ 退出程序 ---------\n");
	for (i=0;i<arga;i++)
	{
		printf("  ******> %2d\n",i);
		free(argv[i]);
	}
	free(argv);
}
程序这样写,在调试的时候没有问题,就是在free(argv)的时候会出现段错误,free(argv[i])的时候也没有错误,假如没有free资源,在程序中一直运行都没有问题。可以加了free资源,全速运行,总是在第一个free(argv[i])就出现段错误。在查找程序好久,才发现原来malloc的时候就出现错误了,一时大意,在二维的argv中应该char*,由于之前程序没有free,导致运行都没有出现错误,在出现错误的时候,就没有检查它。没有良好的编程习惯会让自己死无葬身之地的,特别在大项目中。紧记教训
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值