C 如何处理此错误?(检测到堆栈崩溃已中止(内核转储))
你好!!这是我的密码 源代码的结果导致堆栈崩溃错误 我认为这个代码-C 如何处理此错误?(检测到堆栈崩溃已中止(内核转储)),c,C,你好!!这是我的密码 源代码的结果导致堆栈崩溃错误 我认为这个代码-read(fdata,&data\u cont,1)-有一些问题(堆栈溢出) 但我无法用适当的表达式来替换它 你能帮帮我吗?主要问题可能是这条线路 dd if=/dev/zero of=histogram.bin bs=4 count=256 如果i介于0和9之间,则上面的行尝试用10个字符填充缓冲区,例如data0.bin\0。如果i更大,则字符串甚至更长。不幸的是,您只将fdName定义为八个字节长 还有一些其他问题 sp
read(fdata,&data\u cont,1)代码>-有一些问题(堆栈溢出)
但我无法用适当的表达式来替换它
你能帮帮我吗?主要问题可能是这条线路
dd if=/dev/zero of=histogram.bin bs=4 count=256
如果i
介于0和9之间,则上面的行尝试用10个字符填充缓冲区,例如data0.bin\0
。如果i
更大,则字符串甚至更长。不幸的是,您只将fdName
定义为八个字节长
还有一些其他问题
sprintf(fdname,"data%d.bin", i);
如果j
大于252,则读数超出hisSum
的末尾
在main
中,您不必检查以确保argc
至少为3
此外,当您使用写入文件描述符覆盖时,会泄漏fhist
读取文件描述符。不首先关闭它。字符串“data%d.bin”
将至少包含10个字符(不要忘记终止符!)。然后尝试将其放入8个字符的数组中。read
没有任何错误,只是没有检查返回值。它将一个字节读入无符号字符的地址。很好。
sprintf(fdname,"data%d.bin", i);
for(j=0;j<256*256;j++)
{
read(fdata,&data_cont,1);
hisSum[data_cont]++;
}
for(j=0;j<256;j++)
write(fhist, hisSum+j, 4);