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