C语言 指针数组更改值,当使用 malloc 将内存分配给其他指针时



uint64*数组(指针数组(打印正确的值。在另一个循环(同一副本(中重新打印这些值时,这些值已自动更改。中间有malloc()功能的使用。如果我注释掉mallocg_mgm_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);   

最新更新