09秋数据库课程设计_小结_ 5

本文讲述了在课程设计过程中遇到的代码警告处理及参数传递问题。针对“missing braces around initializer”警告,通过规范数组初始化解决了问题。此外,还探讨了指针传递时内存管理的重要性。

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

今天真是可喜可贺了,课程设计的第二个检查点,今天检查代码量了。嗯,其实呢,到导师检查的时候完成量大致50%,可是今天课时结束后,我们代码的工作基本完成了,可以说是形成了demo了,看来超量完成任务是没问题啦~~~~~~~~~~

其实,今天完成的代码量不在少数,收获颇丰啊,总结一下~~~~~~

1、对“warning: missing braces around initializer”的处理:

在进行变换时,需要用到S变换表,而我使用数组来存储的:

char *arrnS1[][16] = {"1110","0100","1101","0001","0010","1111","1011","1000","0011","1010","0110","1100","0101","1001","0000","0111","0000","1111","0111","0100","1110","0010","1101","0001","1010","0110","1100","1011","1001","0101","0011","1000","0100","0001","1110","1000","1101","0110","0010","1101","1111","1100","1001","0111","0011","1010","0101","0000","1111","1100","1000","0010","0100","1001","0001","0111","0101","1101","0011","1110","1010","0000","0110","1101"};

char *arrnS1[][16] = {{"1110","0100","1101","0001","0010","1111","1011","1000","0011","1010","0110","1100","0101","1001","0000","0111"},"0000","1111","0111","0100","1110","0010","1101","0001","1010","0110","1100","1011","1001","0101","0011","1000"},"0100","0001","1110","1000","1101","0110","0010","1101","1111","1100","1001","0111","0011","1010","0101","0000"},"1111","1100","1000","0010","0100","1001","0001","0111","0101","1101","0011","1110","1010","0000","0110","1101"}};

上面的初始化方法就会引起该warning,下面那个就不会。看出区别了吗?实际上,我初始化了一个4行16列的二维数组,区别在于,下面那个在初始化时,对每行(16列)都加上了“{}”括起来,这样表示它们是一行,就不会出现warning了。

结论:对于初始化,需要严格按照定义,对于结构中的数组,必须加{}。

2、参数传递的问题

同组的伙伴有一部分是这样做的:

out=rewindReplace(out,3);


tmpPrintf=out;
printf("here is the after rewindReplace 3:\n");
for (int counter=0;counter<64;counter++)
{
printf("%d ",*tmpPrintf);
tmpPrintf++;
j=counter+1;
j%=8;
if (j==0)
{
printf("\n");
}
}
printf("%d\n",out);
printf("%d\n",*out);

out=rewindProductChange(out);

tmpPrintf=out;
printf("here is the after rewindProductChange :\n");
for (int counter=0;counter<64;counter++)
{
printf("%d ",*tmpPrintf);
tmpPrintf++;
j=counter+1;
j%=8;
if (j==0)
{
printf("\n");
}
}

在两次输出out的值时,就会出错,而前面的输出完全正确,但是在“rewindProductChange”里又没有将out的值进行改变,为什么两次的输出不同呢?

经过思考,我们发现在“rewindProductChange”中,定义了形参“int *”,而并没有对其进行“new”,这样,在函数尾部虽然return了,但是随着函数的结束,该变量的内存空间也被释放(由于其内存空间跟函数的内存空间在一起)。我们的解决办法是,对其进行“new”,这样它的内存空间就独立于函数本身,即使函数退出,其内存空间也不会被释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值