[英]Char** struct member Invalid Write
我有以下結構
typedef struct mystr{
char** str;
}*mystr;
主要定義
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.