C指针在循环中变为NULL

时间:2015-04-28 15:54:02

标签: c arrays pointers struct

我发现很多'指针变为空'的问题,但很难将问题的答案应用到我的问题

我有3个嵌套结构。 Struct A应该包含一个struct 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数组变为空指针:              data = ds-&gt; window-&gt; data

我明白我做错了传递指针(?)但是我不确定我做错了什么......

1 个答案:

答案 0 :(得分:1)

看起来很好。所以检查代码的另一部分。您可以逐行调试代码,以便了解创建此错误的段。