如何解决函数中的动态结构数组分配
| 我正在尝试在函数内分配结构数组。 我的结构如下: 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-pointer,然后将其传递给函数,该函数将在解析文件并弄清楚它需要多大后才能动态分配它。
目前,这是我的代码的外观:
missionPoint* mission; //declaring the pointer
parseMission(mission);
然后,parseMission函数将解析一个特定的文件,并找出我需要多少个MissionPoint,然后将以以下方式分配它:
mission = (missionPoint*) malloc(n * sizeof(missionPoint));
其中n是我需要的MissionPoints的解析数量。
问题是在函数中我可以看到正确的值,但不能在函数外部看到。函数返回后,就好像什么都没有发生。
感谢您的帮助,以便该函数修改原始指针,并且我可以从函数外部查看数据。
解决方法
您需要传递对指针的引用,即双指针,因为地址本身将被修改:
missionPoint *mission;
parseMission(&mission);
现在,parseMission
的自变量应为missionPoint **
而不是missionPoint *
:
*mission = (missionPoint*) malloc(n * sizeof(missionPoint));
如果您只想修改mission
指向的内存,则没有必要,但是由于要为指针本身分配新的值,因此无法避免。
另请注意,在C中不需要转换返回值malloc
。
, 将引用(即指针)传递给mission
指针,而不是mission
指针本身的值。因此,函数的声明应类似于:
void parseMission(missionPoint** pointer_ref);
而不是:
void parseMission(missionPoint* pointer_val);
然后将地址mission
(即&mission
)作为ѭ4argument的参数值传递。
, 认为C中的指针只是一个整数,它存储一些内存地址。
认为“ 9”分配了一些内存,并向您返回了该内存的地址(一个新的指针)。
理解此代码段将打印\“ 2 \”,而不管被调用函数如何使用传递的值。
int a = 2;
doSomething(a);
printf(\"%d\\n\",a);
一旦理解了所有这些,就可以预测该代码将产生什么,以及为什么需要将\“引用指向指针\”(指向指针的指针)而不是将指针本身(指针的值)传递给您的代码。分配器功能。
void remalloc(char * p1) {
printf(\"pointer before remalloc (inside function): %X\\n\",(unsigned int)(p1));
free(p1);
p1 = (char*)malloc(200000);
printf(\"pointer after remalloc (inside function): %X\\n\",(unsigned int)(p1));
}
int main(){
char * p;
printf(\"pointer before malloc: %X\\n\",(unsigned int)(p));
p = (char*)malloc(10);
printf(\"pointer after malloc: %X\\n\",(unsigned int)(p));
remalloc(p);
printf(\"pointer after remalloc: %X\\n\",(unsigned int)(p));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。