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