uint64*
(指针数组)的数组打印正确的值。在另一个循环(同一副本)中重新打印这些值时,这些值会自动更改。中间有malloc()
函数的用法。如果我注释掉malloc
行g_m
和gm_rm
,那么程序运行良好。
for(i=0;i<num_of_msg_blocks;i++) // loop 1
printf("%lu -%08x ",i,msg_block[i]);
g_m= malloc(num_of_msg_blocks+1);
gm_rn= malloc(num_of_msg_blocks+1);
for(i=0;i<num_of_msg_blocks;i++) //loop 2
printf("%lu -%08x ",i,msg_block[i]);
回路1输出:
0- 00313233
1- 000a3132
2- 00330a31
3- 0032330a
4- 0061736a
5- 006b6264
6- 006b6a61
7- 0062730a
8- 00383231
9- 00343837
10- 00323334
11- 00366862
12- 00776a6b
13- 000a7364
回路2输出:
0- 00313233
1- 000a3132
2- 00330a31
3- 0032330a
4- 0061736a
5- 006b6264
6- 006b6a61
7- 0062730a
8- 00383231
9- 00343837
10- 00000031
11- 00000000
12- 00776a6b
13- 000a7364
从0-9开始,两个循环都输出相同的值,但从10开始,这些值会错误地更改。
上述变量声明如下:
uint32_t *msg_block;
msg_block = malloc(num_of_msg_blocks+1);
uint64_t *g_m;
uint64_t *gm_rn;
为什么打印值依赖于malloc(它们是独立的)?如何纠正?
最佳答案
您没有为msg_block
分配足够的空间。您正在分配num_of_msg_blocks+1
字节,但需要将其乘以每个元素的大小。
msg_block = malloc((num_of_msg_blocks+1) * sizeof *msg_block);
关于c - 指针数组更改值,当使用malloc向另一个指针分配内存时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57813774/