【发布时间】:2018-01-08 18:23:58
【问题描述】:
我正在尝试编写字符串\文件熵计算器。这是我写的代码,但它不起作用:
double entropy(char* buf)
{
int* rgi = (int*)_alloca(256);
int* pi = rgi + 256;
double H = 0.0;
double cb = sizeof(buf);
for (int i = sizeof(buf); --i >= 0;)
{
rgi[buf[i]]++;
}
while (--pi >= rgi)
{
if (*pi > 0)
{
H += *pi * log2(*pi / cb);
}
}
return -H / cb;
}
我做错了什么?
【问题讨论】:
-
我做错了什么? - 这个:How To Ask
-
sizeof(buf)给你指针的大小,而不是缓冲区的大小。缓冲区还包含有符号值,因此即使i包含正确的值,rgi[buf[i]]也会出错。 -
欢迎来到 stackoverflow.com。请花一些时间阅读the help pages,尤其是名为"What topics can I ask about here?" 和"What types of questions should I avoid asking?" 的部分。也请take the tour 和read about how to ask good questions。最后请学习如何创建Minimal, Complete, and Verifiable Example。
-
AFAIK
_alloca不会将分配的内存归零,但您正在增加它的元素。