
我在做DES的加解密,这一段是出问题的部分,其他部分暂时删掉了。
明文p和密钥k以QString的形式传入des这个函数,再转成char[]分别赋给pt和key,输出key到文本框的时候发现pt的内容变成了key的内容,请问这是怎么回事啊?
------解决思路----------------------
注意: 你的 pt 和 key 都是野指针!
------解决思路----------------------
2楼说的是正确的.我再来详细解释一下吧.
pt=p.toLatin1().data();
key=k.toLatin1().data();
这两句里面都生成了一个临时变量,
p.toLatin1();和k.toLatin1()都生成了一个QByteArray类型的临时变量,这个临时变量并没有被保存下来,所以当这句话分号结束的时候,这个临时变量就被销毁了,它配的空间就被回收了.这里得到它的数据指针,指向的地址其实并不存在了.出现什么内容都是不确定的.
修改应该是这样的.就是把的临时变量保存下来.
QByteArray baP = p.toLatin1(); //保存临时变量
pt = baP.data();
QByteArray baK = k.toLatin1();
key= baK .data();
这样这里pt和key指针所指向的内存空间,在这个过程结束之前都会存在.
是这样的,建议把连续的表达式分割开来.一步一步的来.
比如很多时候为了方便会写很多长表达式.a.b.c.d.e.f.g = xxx; 或者 xxx = a.b.c.e.f.g;
这其实是很危险的,因为很多时候可能并不确定其中的某一个环节是否出问题.比如这里b是一个指针,那么它又是一个空指针的时候,这里就会出问题.
检查的时候也很难发现.
