C 将分配的值存储到分配的数组

C 将分配的值存储到分配的数组,c,memory-management,malloc,dynamic-memory-allocation,C,Memory Management,Malloc,Dynamic Memory Allocation,我的代码是: uint8_t* payload = (uint8_t*)malloc(payload_size); uint8_t* payloads = (uint8_t*)malloc(payload_size * 100); for(uint8_t i = 0; i < 100; i++ ){ create_payload(payload); //cannot modify //myapproach payloads[i] = payload; } uint8_t*有效载

我的代码是:

uint8_t* payload = (uint8_t*)malloc(payload_size);
uint8_t* payloads = (uint8_t*)malloc(payload_size * 100);

for(uint8_t i = 0; i < 100; i++ ){

create_payload(payload); //cannot modify 

//myapproach
payloads[i] = payload;

}
uint8_t*有效载荷=(uint8_t*)malloc(有效载荷大小);
uint8_t*有效载荷=(uint8_t*)malloc(有效载荷大小*100);
对于(uint8_t i=0;i<100;i++){
创建_有效负载(有效负载);//无法修改
//我的方法
有效载荷[i]=有效载荷;
}
这甚至不是编译

我希望将有效负载值存储到有效负载数组,因为有效负载变量在每次迭代时都会被替换


有简单的解决方法吗?

制作一个类型为
uint8\u t
指针的数组:

uint8_t* payloads[100];
然后将该数组的一个元素设置为有效负载指针:

payloads[i] = payload;
// make sure payload is of type uint8_t pointer

首先,
payloads
应该指向
uint8\u t
的指针,而不是
uint8\u t
本身(因为您希望在此数据上存储指针)

然后,您为每个有效负载创建使用相同的缓冲区,所以您使用指向相同数据的指针填充有效负载,您需要为每个有效负载分配新的缓冲区

并且,最终得到的缓冲区的大小将是

size of one entry *pointer* * count of entries
不是

size of one entry * count of entries
因此,生成的代码将是:


uint8_t**有效载荷=(uint8_t**)malloc(sizeof(uint8_t*)*100);
//uint8_t*有效载荷[100];-也会起作用
对于(uint8_t i=0;i<100;i++){
uint8_t*有效载荷=(uint8_t*)malloc(有效载荷大小);
创建_有效负载(有效负载);//无法修改
有效载荷[i]=有效载荷;
}
或者,如果希望所有有效负载位于同一缓冲区中,请使用
malloc
将有效负载复制到输出:

uint8_t*有效载荷=(uint8_t*)malloc(有效载荷大小);
uint8_t*有效载荷=(uint8_t*)malloc(有效载荷大小*100);
对于(uint8_t i=0;i<100;i++){
创建_有效负载(有效负载);//无法修改
memcpy(有效载荷+i*有效载荷大小、有效载荷、有效载荷大小);
}

payloads
似乎是一个指针数组,所以不需要
uint8\u t**payloads=(uint8\u t**)malloc(payloads\u size*100)?如果是这样,还有一个问题,
有效载荷
只分配一次,为什么?什么是
创建的\u有效载荷
返回/获取的?它的签名是什么样的?
payloads[i]=*payloads您需要取消引用它,因为有效负载是指针,但您可能希望存储值,而不是指针。您有一个指针
有效负载
。要存储该指针还是要存储它指向的值?如果要存储该值,首先需要取消对指针的引用。@Mattia显示一个演示该问题的最小完整程序。