问题描述
我在尝试从随机数组中复制元素时遇到内存访问故障。 我不知道我在做什么错,请您提前帮忙。
这是我的代码:
1 #include <TSS_API_RNG.h>
2
3 using namespace std;
4
5 // dummy rng for internal speed tests
6 void rng(uint8_t out[],size_t len) {
7
8 unsigned char iv[len];
9 size_t i,k;
10 srand(time(NULL));
11 for (i = 0; i < len; i++) {
12 k = rand()%256;
13 iv[i] = (unsigned char)k;
14 cout << iv[i] << endl;
15
16 memcpy(&out[0],&iv[0],len);
17 cout << &out[0] << endl;
18 memset(&iv[0],0x00,len);
19 }
20 }
21
22 int main() {
23
24 rng(NULL,10);
25 return 0;
26 }
这是我尝试执行程序时发生的事情:
pi@raspBerrypi:~/projects/RNG_final $ ./DUMMY_RNG
▒
Speicherzugriffsfehler
我必须不能正确使用memcopy
函数,但是我不知道如何解决此问题。为了进行测试,我想传递10个随机数,但是在memcpy
的第一次迭代中失败了。循环本身可以正常工作,因此可以正确打印第一个cout
值。
解决方法
Thx伙计们,根据您的建议设法解决了这个问题。
我的代码:
1 #include <TSS_API_RNG.h>
2
3 using namespace std;
4
5 // constructor
6 DUMMY_RNG::DUMMY_RNG()
7 :r_len(0),r_count(0)
8 {
9 std::cout << "Neue Instanz" << std::endl;
10 }
11
12
13 // destructor
14 DUMMY_RNG::~DUMMY_RNG(void)
15 {
16 }
17
18
19 // dummy rng for internal speed tests
20 int DUMMY_RNG::rng(uint8_t out[],size_t len) {
21
22 unsigned char iv[len];
23 size_t k;
24 srand(time(NULL));
25 //for (i = 0; i < len; i++) {
26 k = rand()%256;
27 iv[0] = (unsigned char)k;
28
29 memcpy(&out[0],&iv[0],len);
30 memset(&iv[0],0x00,len);
31 //}
32 return 1;
33 }
34
35
36 // randomize function replacement from botan rng class
37 void DUMMY_RNG::randomize(uint8_t out[],size_t len)
38 {
39 r_count += 1;
40 r_len += len;
41
42 rng(out,len);
43 }