C 未初始化的值是由堆栈分配创建的-找不到哪里出错

C 未初始化的值是由堆栈分配创建的-找不到哪里出错,c,initialization,valgrind,C,Initialization,Valgrind,结果: xcode输出: 我找不到哪里出了问题。我正在为一个命令行编写一些简单的代码,该命令行可以接受带有参数列表的命令。对于长度为的字符串数组,该程序运行良好 这就是导致未初始化值的代码问题 *参数与参数[0]相同。和sizeof都是sizeof(char*) 这意味着您只初始化缓冲区中的几个条目 你需要 memset(arguments, '\0' , (sizeof *arguments * sizeof arguments[0])) 前一行也是如此 memset(arguments

结果:

xcode输出:

我找不到哪里出了问题。我正在为一个命令行编写一些简单的代码,该命令行可以接受带有参数列表的命令。对于长度为的字符串数组,该程序运行良好 这就是导致未初始化值的代码问题

*参数
参数[0]
相同。和
sizeof
都是
sizeof(char*)

这意味着您只初始化缓冲区中的几个条目

你需要

memset(arguments, '\0' , (sizeof *arguments * sizeof arguments[0]))
前一行也是如此

memset(arguments, '\0', sizeof(arguments));
这就是导致未初始化值的代码问题

*参数
参数[0]
相同。和
sizeof
都是
sizeof(char*)

这意味着您只初始化缓冲区中的几个条目

你需要

memset(arguments, '\0' , (sizeof *arguments * sizeof arguments[0]))
前一行也是如此

memset(arguments, '\0', sizeof(arguments));

鉴于
inputChars
的类型是
size\t
(一种无符号类型),测试
if(inputChars==-1){
是非常特殊的。循环控件
中的赋值((inputChars=getline(&input,&bufferSize,stdin))while({
的结果也是可疑的是一个
ssize\t
,(两个s)而不是
size\t
(一个s)。这意味着你的EOF检测被炸成碎片。
memset(line,'\0',(sizeof*line*sizeof line[0]);
是奇数。也许
memset(line,0,sizeof line);
同样适用于
sizeof*参数*sizeof参数[0]
。这也是错误的。您应该编译代码并将其与
-g
选项链接,以在Valgrind输出中获取行号信息。您还应该包括Valgrind输出的文本而不是图像。鉴于
inputChars
的类型为
size\t
(无符号类型),如果(inputChars==-1){是非常奇怪的。循环控件中的赋值
而((inputChars=getline(&input,&bufferSize,stdin))>0{
因此也是可疑的。来自
getline()
的结果是一个
ssize\t
,(两个s)而不是一个
size\t
。这意味着您的EOF检测被炸成碎片。
memset(行,'\0',(sizeof*行*sizeof行[0]);
很奇怪。可能
memset(行,0,sizeof行);
同样适用于
sizeof*参数*sizeof参数[0]
。这也是错误的。您应该编译代码并将其与
-g
选项链接,以获取Valgrind输出中的行号信息。您还应该包含Valgrind输出的文本而不是图像。