【发布时间】:2016-10-06 04:21:00
【问题描述】:
我有以下程序通过双指针引用数组元素。
typedef struct {
int num1;
int num2;
int num3;
} DATA_SET;
typedef struct {
int structID;
DATA_SET *data_set_array; // Pointer to an array of DATA_SET structs
} MY_STRUCT;
int main () {
MY_STRUCT *Struct1;
DATA_SET **DataSetArray; // Array of pointers
Struct1 = malloc(sizeof(MY_STRUCT));
Struct1->data_set_array = malloc(sizeof(DATA_SET*)) //Allocate mem for the pointer to array of DATA_SETs
DataSetArray = malloc(sizeof(DATA_SET*) * 2) // Allocate mem for an array of 2 DATA_SET pointers
DataSetArray[0] = malloc(sizeof(DATA_SET)) // Allocate mem for the actual DATA_SET struct
DataSetArray[0]->num1 = 1;
DataSetArray[0]->num2 = 2;
DataSetArray[0]->num3 = 3;
DataSetArray[1] = malloc(sizeof(DATA_SET)) // Allocate mem for the actual DATA_SET struct
DataSetArray[1]->num1 = 1;
DataSetArray[1]->num2 = 2;
DataSetArray[1]->num3 = 3;
memcpy(Struct1->data_set_array, *DataSetArray, sizeof(DATA_SET*); //Copy data set array into Struct1
当我在 Struct1 中打印所有数据时,我得到:
Struct1->data_set_array[0].num1 = 1
Struct1->data_set_array[0].num2 = 2
Struct1->data_set_array[0].num3 = 3
Struct1->data_set_array[1].num1 = 50 //This should be 1
Struct1->data_set_array[1].num2 = 50 //This should be 2
Struct1->data_set_array[1].num3 = 65 //This should be 3
似乎是数组中第二个元素的误用/数据损坏。
我知道可能有不同的方法可以做到这一点,但我想熟悉通过双指针引用数组索引。我是否正确分配内存?我感觉 memcpy 不正确。
【问题讨论】:
-
您为 DataSetArray 分配了两倍于 Struct1->data_set_array 的内存大小,然后复制了一半的数据。
-
为什么要变量
DataSetArray和一个memcpy?只需使用Struct1->data_set_array- 它会让您的代码更简单。 -
您的意思是明确修改 Struct1->data_set_array[0] 吗?我不需要为结构分配内存吗?
-
"
DATA_SET **DataSetArray; // Array of pointers" 这里的DataSetArray是指向DATA_SET的指针。任何地方都没有数组。 -
“我想熟悉如何通过双指针引用数组索引。”这很不清楚,因为它现在没有任何意义。可能是语言问题?无论如何,请更详细地描述您的目标。