c - 将分配的值存储到分配的数组

标签 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;

}

这甚至都没有编译。

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

有没有简单的解决方案?

最佳答案

首先,payloads应该指向uint8_t的指针,而不是uint8_t本身(因为你想存储这个数据上的指针)

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

最后 - 结果缓冲区的大小将为

size of one entry *pointer* * count of entries

不是

size of one entry * count of entries

因此生成的代码将是:


uint8_t** payloads = (uint8_t**)malloc(sizeof(uint8_t*) * 100);
// uint8_t* payloads[100]; - Will also work

for(uint8_t i = 0; i < 100; i++ ){
    uint8_t* payload = (uint8_t*)malloc(payload_size);

    create_payload(payload); //cannot modify 

    payloads[i] = payload;
}

或者,如果您希望所有有效负载位于同一缓冲区中,请使用 malloc 将有效负载复制到输出:

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 

    memcpy(payloads + i * payload_size, payload, payload_size);
}

关于c - 将分配的值存储到分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353482/

相关文章:

c - 我正在尝试返回第一个持有值(value)项目的节点,如果没有找到则返回 NULL

c++ - 套接字内存泄漏

objective-c - 使用 ARC 在 self.managedObjectContext 上调用 perfromBlock 时保留周期?

c - 为什么我的数组在将其传递到另一个函数后仍保留垃圾值/段错误?

c - 在程序中计算标量积的第一个 'for' 循环之后,第二个 'for' 循环被忽略

c - C中http header 的正则表达式

c - 使用 fprintf 正确保存数据,但打印出奇怪的值

c - 将成员从struct初始化为外部函数的方向

android - Android LMK 和 Linux OOM 之间有什么区别

c - 使用 malloc 初始化结构内部的结构?