将字符串复制到数组 - strcpy segfault

时间:2016-09-29 13:56:39

标签: c arrays pointers segmentation-fault malloc

我正在尝试将字符串复制到数组并打印出来。它适用于第一个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
 }

}

1 个答案:

答案 0 :(得分:1)

您需要移动argumentArray

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

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

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

那就是说,