C指针在循环中变为NULL

C Pointer becomes NULL in loop

我发现了很多 'pointer becomes NULL' 个问题,但很难将答案应用到我的问题中

我有 3 个嵌套结构。结构 A 应该包含一个结构数组 B,它包含一个结构 C,它本身应该包含一个数组 int:

typedef struct {
    int32_t *data;
    uint16_t nData;
    uint16_t dataOffset;        
} Window;

typdef struct {
    Window *window;
    const char *datasetPath;
} Dataset

typedef struct {
    char *id;
    uint8_t count;
    Dataset *datasets;
} DatasetGroup;

我有一个 new 结构函数:

int8_t dataset_new(Dataset *ds, const char *datasetPath, uint16_t winSize){
    ds->datasetPath = datasetPath;
    ds->window = malloc(sizeof(*(ds->window));
    ds->window->data = malloc(sizeof(int32_t) * (winSize));
    return 0;

int8_t datasetgroup_new(DatasetGroup *dg, char *id){
    dg->id = id;
    dg->count = 0;
    dg->datasets = malloc(sizeof(*(dg->datasets)) * 255);
}

我有一个 add 函数可以将 Dataset 添加到 DatasetGroup:

int8_t datasetgroup_add(DatasetGroup *dg, const char *filePath, uint16_t winSize){
       // Create the dataset
       Dataset ds; 
       dataset_new(&ds, filePath, winSize);

       // Add the dataset to the dataset array
       dg->datasets[dg->count] = ds;
       dg->count++;
       return 0;
       }

然后我遍历数据集以填充数据,执行以下操作:

     for (i = 0 ; i < datasetCount ; i++){
         Dataset *ds = &(dg->datasets[i])

总是在第二次交互时,data 数组变为空指针: 数据 = ds->window->数据

我知道我在传递指针时做错了(?)但我不确定我到底做错了什么....

这看起来不错。所以检查代码的另一部分。您可以逐行调试代码,以便了解导致此错误的段。