返回信息流如题:相关代码贴在下面,
由于要返回该指针,所以定义了全局变量:int *ctr_out = new int;
函数调用如下:
payload_De_tmp = AES_CTR_Decrypt::get_AES_Decrypt_tmp()->AES_Decrypt(payload_En_tmp,35,row_key_t,sou_addr_tmp,frame_count_tmp,sec_level_trans);
楼主 使用单例模式,私有化对象,然后调用函数AES_Decrypt(),该函数属于类AES_CTR_Decrypt,通过get_AES_Decrypt_tmp()函数获得该对象。输入参数通过单步调试已验证没有错,程序运行到这个函数就会异常退出,
函数定义如下:
int* AES_CTR_Decrypt::AES_Decrypt(int *ctr_in,int lm,int *key,int *src_addr,int *frame_cnt,int sec_level)
{
int iv[16];
int ivout[16];
int nonce[13];
int ExpKey[4*Nb*(Nr+1)];
int cnt;
int i;
int n;
nonce[12]=sec_level; //默认加密的安全等级
iv[0]=0x01;
iv[14]=0x00;
iv[15]=0x01;
for(i=0;i<8;i++)
{nonce[i]=src_addr[i];}
for(i=0;i<4;i++)
{nonce[i+8]=frame_cnt[i];} //得到随机nonce值
for(i=0;i<13;i++)
{iv[i+1]=nonce[i];} //得到初始iv值,不包括最后一位
if(lm%16)
{
cnt = lm/16 + 1;
}
else
cnt=lm/16; //得到需要进行ctr计算的次数cnt
ExpandKey(key,ExpKey); //得到扩展轮密钥
for(i=0;i<cnt;i++)
{
for(n=0;n<16;n++)
{
Encrypt(iv,ExpKey,ivout); //得到加密后的iv
ctr_out[i*16+n]=ctr_in[i*16+n]^ivout[n]; //得到一次的加密密文
}
iv[15]++;
}
return ctr_out;
}
跪求各位大神帮忙看看代码。[ema23]
这是一条镜像帖。来源:北邮人论坛 / cpp / #92776同步于 2016/7/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[问题]求助,C++ 调用返回指针的函数时,程序异常退出
Cyach
2016/7/25镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
首先整理一下格式
int* AES_CTR_Decrypt::AES_Decrypt(int *ctr_in,int lm,int *key,int *src_addr,int *frame_cnt,int sec_level)
{
int iv[16];
int ivout[16];
int nonce[13];
int ExpKey[4*Nb*(Nr+1)];
int cnt;
int i;
int n;
nonce[12]=sec_level; //默认加密的安全等级
iv[0]=0x01;
iv[14]=0x00;
iv[15]=0x01;
for(i=0;i<8;i++)
{nonce[i]=src_addr[i];}
for(i=0;i<4;i++)
{nonce[i+8]=frame_cnt[i];} //得到随机nonce值
for(i=0;i<13;i++)
{iv[i+1]=nonce[i];} //得到初始iv值,不包括最后一位
if(lm%16)
{
cnt = lm/16 + 1;
}
else
cnt=lm/16; //得到需要进行ctr计算的次数cnt
ExpandKey(key,ExpKey); //得到扩展轮密钥
for(i=0;i<cnt;i++)
{
for(n=0;n<16;n++)
{
Encrypt(iv,ExpKey,ivout); //得到加密后的iv
ctr_out[i*16+n]=ctr_in[i*16+n]^ivout[n]; //得到一次的加密密文
}
iv[15]++;
}
return ctr_out;
}
然后楼主你没说清楚具体哪一步退出的。。。如果是运行的时候出错,那就调试,如果是调试的时候出错,而且如果是一进函数就出错,就得说说你用的什么工具调试的(这个我遇到过)
int *ctr_out = new int; 不对吧
你都在循环里这样使用:
ctr_out[i*16+n]=ctr_in[i*16+n]^ivout[n]; //得到一次的加密密文
cpp用不太熟,求说具体一点,跪谢!
【 在 aquamarine 的大作中提到: 】
: 跑一次,把进程转储文件搞出来,然后backtrace一下就好了。
:
发自「贵邮」
这个好像是初始化指针,让ctr_out指向一个匿名变量,bim浮游指针…,网上查到是这么用的^_^
【 在 nxlhero 的大作中提到: 】
: ctr_out = new int?
:
发自「贵邮」