c - 指针数组更改值,使用 malloc 将内存分配给其他指针时

标签 c pointers memory-management memory-leaks 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);   

关于c - 指针数组更改值,使用 malloc 将内存分配给其他指针时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57813774/

相关文章:

c - 如何在 C 中保持全局存储区域类型独立?

c - 为什么我会收到无效的初始化程序错误?

c# - 修改 C# 颜色 int 或 uint 的一个字节

C 二维数组 : Is the first 'level' an array of pointers?

java - 如果在无限循环内声明任何变量/对象,内存方面会出现什么情况?

c++ - 内存意识和大数据

c - getpeername() 不会返回正确的端口,但会返回正确的远程主机套接字地址 C 语言

c - 为什么 Linux 不遵循 Unix 系统调用约定?

将 char * 转换为 int

c - 反向字符串 realloc() : invalid next size