我正在尝试在函数内分配结构数组。
我的结构如下:
typedef struct{
uint16_t taskNumber;
uint16_t taskType;
double lat;
double lon;
double speed;
uint8_t successCriteria;
uint16_t successValue;
uint8_t nextPoint;
}missionPoint;
在我的代码中,我声明了一个missionPoint指针,然后将其传递给函数,该函数将在解析文件并计算出它需要有多大之后动态分配它。 目前,我的代码如下所示:
missionPoint* mission; //declaring the pointer
parseMission(mission);
parseMission 函数将解析一个特定的文件并找出我需要多少个 MissionPoints,然后按以下方式分配它:
mission = (missionPoint*) malloc(n * sizeof(missionPoint));
其中 n 是我需要的已解析任务点数。
问题是在函数内部我可以看到正确的值,但在函数外部看不到;一旦函数返回,就好像什么都没发生一样。
非常感谢您的帮助,以便该函数修改原始指针,并且我可以从函数外部看到数据。
最佳答案
您需要传递对指针的引用,即双指针,因为地址本身将被修改:
missionPoint *mission;
parseMission(&mission);
parseMission
的参数现在应该是 missionPoint **
类型,而不是 missionPoint *
:
*mission = (missionPoint*) malloc(n * sizeof(missionPoint));
如果您只想修改 mission
指向的内存,则没有必要这样做,但这是不可避免的,因为您正在为指针本身分配一个新值。
另请注意,在 C 中不需要强制转换 malloc
的返回值。
关于c - 函数内的动态结构数组分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6349602/