【问题标题】:copy a string to an array -- strcpy segfault将字符串复制到数组中——strcpy segfault
【发布时间】:2016-09-29 13:56:39
【问题描述】:

我正在尝试将一个字符串复制到一个数组并打印它。它适用于第一个 for 循环,但第二次出现 seg 错误。

main (int argc, char *argv[]){
 int argcIndex;
 char **argumentArray = NULL;

 for(argcIndex=0; argcIndex < argc; argcIndex++){
     argumentArray = (char**) malloc((argc+1)*sizeof(char*));
     argumentArray[argcIndex] = (char*) malloc(((strlen(argv[argcIndex])+1)*sizeof(char)));
     strcpy(argumentArray[argcIndex], argv[argcIndex]); //Works here
     printf("argumentArray[%d]: %s \n", argcIndex, argumentArray[argcIndex]); //Works here
 }

 for(argcIndex=0; argcIndex < argc; argcIndex++){
     //strcpy(argumentArray[argcIndex], argv[argcIndex]); //This gives me a segfault
     printf("argumentArray[%d]: %s \n", argcIndex, argumentArray[argcIndex]); //This will only grab the last string in array
 }

}

【问题讨论】:

标签: c arrays pointers segmentation-fault malloc


【解决方案1】:

你需要移动argumentArray的分配

 argumentArray = (char**) malloc((argc+1)*sizeof(char*));

在第一个 for 循环之外,否则,每次迭代,您都会覆盖(最终泄漏)内存。

下面的问题是,malloc() 返回未初始化的内存,而对于最后一次迭代,只有一个索引,argc-1 正在写入,所以其他 index 仍然不确定。在后面的循环中,当您尝试使用该值时,它会调用 undefined behavior

也就是说,

【讨论】:

  • 谢谢!我知道是 malloc 语句导致了错误,但不知道是什么。谢谢!
猜你喜欢
  • 2013-02-26
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 2013-07-28
  • 2016-02-09
  • 2021-07-19
相关资源
最近更新 更多