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->数据
我知道我在传递指针时做错了(?)但我不确定我到底做错了什么....
这看起来不错。所以检查代码的另一部分。您可以逐行调试代码,以便了解导致此错误的段。
我发现了很多 '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->数据
我知道我在传递指针时做错了(?)但我不确定我到底做错了什么....
这看起来不错。所以检查代码的另一部分。您可以逐行调试代码,以便了解导致此错误的段。