繁体   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