传递含数组字段的结构体数组至函数时出现段错误的问题排查
问题分析与修复
错误根源
你在ArrayFunction里对参数的访问逻辑完全错误:
- 传入的
&array是buffer**类型,它只是单个指针的地址,绝非指针数组。当你用array[i](i>0)时,相当于从这个单个指针的地址往后偏移i个buffer*长度去访问内存,这直接超出了合法范围,必然触发段错误或访问无效内存。
修复方案
先解引用参数,拿到指向buffer结构体数组的真实指针,再用这个指针遍历数组元素:
修正后的ArrayFunction代码
void ArrayFunction(buffer **array) { // 先获取指向buffer数组的指针 buffer* arr = *array; // Doing something to determine somesize for (int i = 0; i < 255; i++) { // 先释放main中初始化的data,避免内存泄漏 free(arr[i].data); arr[i].size = 100; arr[i].data = calloc(100, sizeof(uint8_t)); //check for error //Setting the data to something useful } }
额外提醒
- main里初始化的
array[i].data会被函数内的calloc覆盖,必须提前free,否则会造成内存泄漏。 - 务必坚持检查
calloc/malloc的返回值,确保内存分配成功。
内容的提问来源于stack exchange,提问作者bugwriter123
相关产品推荐
相关产品推荐

