簡體   English   中英

c中指針的內存分配

[英]memory allocation for pointers in c

我有一個數組如下:

 char* arg[1024];

現在要初始化將要傳遞給函數的arg,我正在執行以下操作:

 arg = (char**)calloc(1024,sizeof(char*)); 

但是,每當我將arg傳遞給函數時。 我最終遇到了細分錯誤。 該函數基本上是執行一些非常簡單的命令來進行單詞解析:

 void parse(char* buffer, char** arg)
 {
   while(*buffer!='\0')
   {
     *arg=buffer;
      arg++;
      while(*buffer!=' ')
      buffer++;

      while(*buffer == ' ')
      {
         *buffer = '\0';
          buffer++;
      }         

   }
 }

我在分配內存時做錯了嗎? 或傳遞指針?

char* arg[1024];

提供一個由1024個char指針靜態分配的數組。 您無需再次動態分配它。 因此,刪除您的calloc()行。

除了分配問題之外,還有另一個錯誤。 看一眼:

while(*buffer != ' ')
    buffer++;

如果buffer = "test"怎樣? 您的while循環將找不到空間,並繼續在buffer之外進行迭代。 導致各種不確定的行為...

要修復它,您還需要檢查字符串終止符:

while(*buffer != 0 && *buffer != ' ')
    buffer++;

char* arg[1024]; char指針的數組。

arg = (char**)calloc(1024,sizeof(char*)); 是錯的。 我們無法將新分配的內存地址分配給arg

如果您要創建字符串數組,請執行以下操作:( 我想您需要這樣做)

char* arg[1024];
arg[i] = (char*)calloc(1024,sizeof(char)); 

i是一個索引。

您說的是segmentation fault. 但我認為您應該為arg = (char**)calloc(1024,sizeof(char*));遇到編譯錯誤 聲明。 錯誤:分配時類型不兼容

我還注意到parse()錯誤。 (由Veger回答)
您還可以使用strsep()函數解析你buffer字符串,在這里我的回答可以用於此目的。

arg已根據您的情況分配。 您說您需要它大1024個元素-它是靜態分配的

=>省略char *arg[1024]並替換為char **arg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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