首页 > 解决方案 > 访问动态分配的指向结构的指针数组的成员

问题描述

name我需要一个全局动态指针数组,我将在其中存储我的结构,因为稍后我需要遍历这个数组以列出所有存储的信息,我age还需要能够job从控制台,并将它们存储在person_t数组中iterator

#include <stdio.h>
#include <stdlib.h>

typedef struct Person
{
    char name[30];
    int age;
    char job[30];
} person_t;

person_t **iterator;
int capacity = 10;
int size = 0;

int main()
{
    int i;
    *iterator = (person_t *)malloc(capacity * sizeof(person_t));
    for (i = 0; i < capacity; ++i)
    {
        person_t p;
        p.age = i;
        *iterator[i] = p;
    }
    return 0;
}

编译此代码(gcc -ansi -pedantic -Wall -Wextra)时我没有收到任何错误/警告,但是当我尝试运行它时,我会Segmentation fault立即得到一个。

标签: arrayscpointersstructmalloc

解决方案


当你这样做时:

*iterator = (person_t *)malloc(capacity * sizeof(person_t));

您正在推迟iterator,但是作为文件范围指针变量,它被初始化为 NULL。尝试取消引用 NULL 指针会调用未定义的行为

我怀疑你真正想要的是一个结构数组,而不是一个指向结构的指针数组。既然如此,定义iterator为:

person_t *iterator;

然后你像这样为它分配内存:

iterator = malloc(capacity * sizeof(person_t));

然后像这样分配给数组元素:

iterator[i] = p;

推荐阅读