Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双指针的铸造及其在C语言中的应用_C_Segmentation Fault_Double Pointer - Fatal编程技术网

双指针的铸造及其在C语言中的应用

双指针的铸造及其在C语言中的应用,c,segmentation-fault,double-pointer,C,Segmentation Fault,Double Pointer,下面是一个简单的双指针代码以及我尝试使用的代码: int argsCount = 1; char **cmdArgs1 = malloc((argsCount + 1)*sizeof(char*)); 我想在cmdArgs1中输入值,下面是我正在做的事情和导致seg故障的原因 for(counter = 0; counter < argsCount; counter++) { strcpy(cmdArgs1[counter],"ls"); } for(计数器=0;计数器

下面是一个简单的双指针代码以及我尝试使用的代码:

int argsCount = 1;
char **cmdArgs1 = malloc((argsCount + 1)*sizeof(char*));
我想在cmdArgs1中输入值,下面是我正在做的事情和导致seg故障的原因

for(counter = 0; counter < argsCount; counter++)
{
    strcpy(cmdArgs1[counter],"ls");
}
for(计数器=0;计数器
我想我不能使用“cmdArg1[counter]”复制到“ls”,因为双指针不是那样工作的?我不确定


即使我认为这有点模糊,但我不知道如何表达这个问题,我会尝试根据评论进行更新。谢谢

您的
cmdArgs1
是指向指针的指针,这意味着它不足以为数组本身分配空间。您需要为单个字符数组(或单个C字符串)分配空间

您可以单独调用
malloc

for(counter = 0; counter < argsCount; counter++)
{
    cmdArgs1[counter] = malloc(strlen("ls")+1); // +1 for null terminator
    strcpy(cmdArgs1[counter], "ls");
}
在这两种情况下,您的程序都有责任在
free
ing数组本身之前
free
ing数组元素:

for(counter = 0; counter < argsCount; counter++)
{
    free(cmdArgs1[counter]);
}
free(cmdArgs1);
for(计数器=0;计数器
cmdArgs1[计数器]
未初始化。除非给它指定了一个有意义的值,否则不能引用它。你的意思是不是
strlen(“ls”)+1
?这与斯特伦(“ls”+1)
@DavidFoerster完全不同!谢谢
for(counter = 0; counter < argsCount; counter++)
{
    free(cmdArgs1[counter]);
}
free(cmdArgs1);