首页 > 解决方案 > 如何使用 malloc 和结构指针数组

问题描述

我想尝试分配我的前 10 个结构。我们必须在堆中存储一个结构指针数组,但我不知道我在做什么错

我的结构看起来像这样

typedef struct TEST
{
    char* first_string;
    char* second_string;
} test;

我写的是:


test **string_pair;

string_pair = malloc(10 * sizeof(test *));
  if(string:pair == NULL)
  {
    free(string_pair);
    exit(4);
  }

这很好用但是后来我尝试在for循环中分配我的字符串


string_pair[count]->first_string = malloc(10 * sizeof(char)); // note that count is currently 0
  if(string_pair[count]->first_string == NULL)
  {
    free(string_pair[count]->first_string);
    free(string_pair[count]);
    exit(4);
  }

我得到一个分段错误

在任何人建议我们不允许简单地使用结构数组之前,我们必须以复杂的方式来做。

提前谢谢

标签: c

解决方案


您分配了一个指针数组。

但是您没有为实际结构分配内存,也没有初始化分配的指针。

这一行:

string_pair = malloc(10 * sizeof(test *));

分配可以存储内存地址的 4 或 8 个(取决于您的体系结构)字节变量的数组。

它不分配struct TEST。指针将包含垃圾(可能无效)地址,直到您对其进行初始化。

您应该通过调用mallocforstruct TEST并将结果指针放入数组中来实现。

否则,当您的代码到达这一行时:

string_pair[count]->first_string

它将寻找struct TEST一些随机地址,可能是 0,并尝试读取其first_string字段,这将导致分段错误。


推荐阅读