【发布时间】:2021-12-09 01:03:39
【问题描述】:
我有以下结构
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 错误。有什么帮助吗?
【问题讨论】:
-
您可能错过了另一层分配。您的意思是用 malloc 块初始化每个 char* 吗?
-
不要 typedef 指针。它只会使代码更难理解。这可能是导致此代码最终出错的重要原因。
-
@Abel 那将是下一步,但是甚至数组分配都不起作用,所以我没有着手分配每个索引。
-
typedef struct mystr *mystr;可能是一个错误。sizeof(mystr*)也是如此 -
尝试使用“typedef struct S_MyStruct { char** str; } MyStr, * P_MyStr;”之类的东西重写你的代码。这清楚地表明了哪个是结构名称,结构名称的 typedef 和指向结构的指针的 typedef。