arrays - 处理结构内的可变字符串数组 (C)
问题描述
我必须知道是否有一种方法可以在结构内部声明一个可变长度的字符串数组,就像这样
struct node {
int k;
char * arr[length_variable];
}
现在我正在做类似的事情
struct node {
int k;
char ** arr;
}
int main()
{
...
struct node * n = (struct node*)malloc(sizeof(struct node));
n->arr = malloc(sizeof(char*)*length_of_first_array); //the length of the array is variable
n->arr[0] = malloc(sizeof(char)*length_first_string+1); //+1 is for \0 character
strcpy(n->arr[0],"word");
...
}
不幸的是,使用 valgrind 工具“内存检查”分析输出代码,我的 malloc 似乎有问题。
解决方案
VLA 不能是结构或联合类型的成员:
6.7.2.1 结构和联合说明符C 2011 在线草案
...
9 结构或联合的成员可以具有除可变修改类型之外的任何完整对象类型。123) ...
123) 结构或联合不能包含具有可变修改类型的成员,因为成员名称不是 6.2.3 中定义的普通标识符。
就分配而言,您发布的代码是正确的 - 完成后您是否正确地释放了该内存?你必须确保你free
每个人都在你n->arr[i]
之前free
n->arr
,而且你必须在你free
n->arr
之前。free
n
推荐阅读
- python - 限制 Tesseract 中的多处理核心
- reactjs - 在创建反应应用程序中安装 sass 的最佳方法
- html - 需要借助类名来访问
- css - 保持下拉
- css - 标准媒体查询使网站响应
- android - Windows emulator.exe PANIC:缺少“x86”CPU 的仿真器引擎程序
- javascript - 将 JavaScript 代码抽象为 ES6 函数
- java -
更新 不能在 oracle 数据库中工作,而在 mysql 中它可以工作 - angular - Angular 2 移动元素动画
- sql - 如何使用 count() 函数在 sql server 中将单列检索为两列?