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显示一个演示该问题的最小完整程序。