这是我的结构。
typedef struct {
uint8_t *data;
size_t size;
} buffer;
我在我的主函数中像这样初始化它。
buffer *array;
array = calloc(255, sizeof(*array));
//check for error
for (int i = 0; i < 255; i++) {
array[i].data = malloc(sizeof(*array->data));
//check for error
}
然后我将其传递给一个函数。
ArrayFunction(&array);
这就是它的定义方式
void ArrayFunction(buffer **array) {
// Doing something to determine somesize
for (int i = 0; i < 255; i++) {
array[i]->size = 100;
array[i]->data = calloc(100, sizeof(uint8_t));
//check for error
//Setting the data to something useful
}
}
当通过调试器查看我的程序时,我在主函数中的初始化似乎很好,内存是有效的。一旦进入 ArrayFunction,第 0 个元素之后的内存就无效或未初始化,这会在尝试调用时导致分段错误。它确实适用于第 0 个步骤,设置数据步骤也适用。
你太努力了。你不需要双指针。
以
//**
开头的评论中的解释
您可能只想要这个:
#include <stdint.h>
#include <stdlib.h>
typedef struct {
uint8_t* data;
size_t size;
} buffer;
void ArrayFunction(buffer *arr) { //** just pass the buffer (t's a pointer)
const int somesize = 11; //** just made up some value
for (int i = 0; i < 255; i++) {
arr[i].size = somesize; //** it's arr not buffer, buffer is a type.
arr[i].data = calloc(somesize, sizeof(uint8_t));
}
}
int main(int argc, char* argv[])
{
buffer* array;
array = calloc(255, sizeof(*array));
//check for error
for (int i = 0; i < 255; i++) {
array[i].data = malloc(sizeof(*array->data));
//check for error
}
ArrayFunction(array); //** just pass the pointer
}