Arrays 使用变量(而不是常量)访问数组时出现分段错误

Arrays 使用变量(而不是常量)访问数组时出现分段错误,arrays,c,gcc,segmentation-fault,malloc,Arrays,C,Gcc,Segmentation Fault,Malloc,我肯定我忽略了一些简单的事情,但我一直没能弄明白。我的代码是 #包括 #包括 #包括 #包括 #包含//用于退出() #包含//用于getopt() 常量int MAX_PID_LENGTH=10;//#(允许用户输入PID) int main(int argc,char*argv[]){ int opt;//即要分析的选项 int-pidCount=0;//即#(计数PID) 字符数组; int pidArrayLength=10; 而((opt=getopt(argc,argv,p:)!=-

我肯定我忽略了一些简单的事情,但我一直没能弄明白。我的代码是

#包括
#包括
#包括
#包括
#包含//用于退出()
#包含//用于getopt()
常量int MAX_PID_LENGTH=10;//#(允许用户输入PID)
int main(int argc,char*argv[]){
int opt;//即要分析的选项
int-pidCount=0;//即#(计数PID)
字符数组;
int pidArrayLength=10;
而((opt=getopt(argc,argv,p:)!=-1){
开关(opt){
案例“p”:
如果(!optarg){
printf(“无效的命令行参数。\n”);
退出(退出失败);
}
if(!pidArray){
pidArray=(char**)malloc(sizeof(char*)*pidaraylength);
if(!pidArray){
printf(“无法分配内存。\n”);
退出(退出失败);
}
}else if(pidCount>=pidArrayLength){
pidArrayLength*=2;
pidArray=(char**)realloc(pidArray,sizeof(char*)*pidaraylength);
if(!pidArray){
printf(“无法重新分配内存。/n”);
退出(退出失败);
}
}
pidArray[pidCount]=(char*)malloc(sizeof(char)*最大PID长度);
strcpy(pidArray[pidCount],optarg);
pidCount++;
}
}
}
当我使用命令行参数“-p1”(或任何其他代替“1”的参数)运行此代码时,我在行“pidArray[pidCount]=(char*)malloc(sizeof(char)*MAX_PID_LENGTH);”处得到一个分段错误。值得注意的是,如果我将此行中的pidCount更改为0,则不会出现分段错误,即使pidCount的值为0。此外,当我使用ssh连接到学校的一台计算机并在那里运行代码时,我没有收到任何此类错误

如果您能深入了解导致错误的原因以及如何修复它,我们将不胜感激

  • 您可以在
    if
    语句中访问未初始化的变量
    pidArray
    。您需要在初始化中初始化otnull或malloc
  • 您不需要强制转换malloc的结果
  • 而是使用sizeof中的对象而不是类型:
    pidArray=malloc(sizeof(*pidArray)*pidaraylength)
  • sizeof(char)
    根据定义是
    1
    ,完全不需要

  • 谢谢,我将进行这些更改,尽管我不知道这些更改会如何导致错误。您能澄清一下吗?您使用的是未初始化变量。自动变量不归零。