arrays - Char** 结构成员无效写入
问题描述
我有以下结构
typedef struct mystr{
char** str;
}*mystr;
main 中的定义
mystr mst = NULL;
init(&mst);
我想在这个函数中初始化
void init(mystr* m){
*m = malloc(sizeof(mystr*));
(*m)->str = malloc(sizeof(char*)*2); /*dynamic array of strings with 2 indexes */
}
然而,函数代码的最后一行在分配块后会导致无效写入和地址 0 字节的 valgrind 错误。有什么帮助吗?
解决方案
如果你这样定义它
typedef struct mystr{
char **str;
}mystr;
malloc()
返回一个指针,如果您init()
必须记住 C 将参数的值复制到堆栈中。
void init( mystr ** _mystr )
{
*_mystr = malloc( sizeof(mystr));
(*_mystr)->str = malloc( sizeof(char*) * 2 );
}
你像使用它一样
mystr *mystr;
init( &mystr );
另一个避免双指针的版本是
mystr *initMystr()
{
mystr *_mystr = malloc( sizeof(mystr));
_mystr->str = malloc( sizeof(char*) * 2 );
return _mystr;
}
和
mystr *mystr = initMystr();
推荐阅读
- java - spring boot 2 with payara server 5 - 多类错误
- mysql - MySQL WorkBench 不起作用,但在任务管理器中它正在运行
- javascript - 从字符串中分离 HTML 属性和值
- amazon-web-services - AWS S3 和 IAM - 定义用户只能访问(读取)某些文件夹的策略
- excel - Excel 中 FMI/FMU 的开源工具?
- android - 构建函数返回 null。构建函数绝不能返回 null
- node.js - 如何使用 express node.js ECONNRESET 处理 promise.all
- html - 将导航栏背景从透明更改为黑色
- unity3d - 尝试下载统一的构建器时出现错误
- kubernetes - 在 tekton 管道中使用 knctl/kubectl 将镜像部署到 Knative 服务