c - 如何使用 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);
}
我得到一个分段错误
在任何人建议我们不允许简单地使用结构数组之前,我们必须以复杂的方式来做。
提前谢谢
解决方案
您分配了一个指针数组。
但是您没有为实际结构分配内存,也没有初始化分配的指针。
这一行:
string_pair = malloc(10 * sizeof(test *));
分配可以存储内存地址的 4 或 8 个(取决于您的体系结构)字节变量的数组。
它不分配struct TEST
。指针将包含垃圾(可能无效)地址,直到您对其进行初始化。
您应该通过调用malloc
forstruct TEST
并将结果指针放入数组中来实现。
否则,当您的代码到达这一行时:
string_pair[count]->first_string
它将寻找struct TEST
一些随机地址,可能是 0,并尝试读取其first_string
字段,这将导致分段错误。
推荐阅读
- postgresql - Clojure:为 JDBC 创建一个日期时间对象
- android - Dagger 2模块中为OkHttpClient提供HttpLoggingInterceptor实例的两个问题
- python - 读取条目之间具有任意空格的 .csv 文件
- javascript - 为什么附加到元素时我的增量为0
- algorithm - 求和一个数字的所有数字的算法
- javascript - 键码是如何决定的?
- php - 从函数内部访问 PHP 对象
- flutter - Flutter AnimationController 侦听器未触发
- html - 如何为干净的文档大纲正确使用基本的 HTML5 部分?
- python - 从“列表”末尾获取 Twitter 上的用户关注者