簡體   English   中英

Char** struct 成員寫入無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM