【发布时间】:2010-06-23 15:40:11
【问题描述】:
我需要从一个函数返回一个无符号整数*。下面的代码可以编译,但会在 Windows 64 位机器上运行时崩溃。我知道我在某个地方犯了一个愚蠢的错误,有人可以为我指出。 :p。我还在头文件中声明了该函数,所以我知道它不是那个错误。
请注意,我已经审查了变量名称和编号,因为此函数存在的问题尚未公开发布。
功能:
unsigned int* convertTime(unsigned int inputInteger, unsigned short inputFrac) {
unsigned int* output = new unsigned int[2];
double messageTimeFraction = double(inputFrac) * 20e-6;
output[1] = unsigned int(inputInteger + 2209032000);
output[2] = unsigned int(messageTimeFraction * 2e32);
return output; // Seconds
}
实施:
unsigned int* timeStamp;
timeStamp = convertTime(inputInteger,inputFrac);
【问题讨论】:
-
请注意,
unsigned int(...)强制转换不是严格有效的(Visual C++ 支持它作为扩展)。有a related, somewhat technical question about this。您可以只使用unsigned(...),也可以使用(unsigned int)(...)。 -
我希望你在函数返回的 ptr 上调用 delete[],否则你会有内存泄漏...最好使用一个包含两个 int 的结构
-
如果我记得我的 C++ 正确 unsigned(something) 不是强制转换而是构造函数,创建一个临时的。所以给定的代码肯定不是 C。C 的适当强制转换是 (unsigned long)(...) 而对于 C++,它将是 static_cast(...)
-
我相信
int在 Visual C++ 编译为 64 位应用程序中是 32 位,所以unsigned int(inputFrac * 2e32)将毫无意义,几乎可以肯定一致为 0。这不应该导致崩溃,但无论如何它可能是一个错误。另外,2209032000 是一个无意义的幻数,messageTimeFraction是不用的。如果这不是完整的功能,请告诉我们。
标签: c++ arrays function dynamic