Мне нужно вернуть беззнаковое int * из функции. Приведенный ниже код будет скомпилирован, но во время выполнения на 64-разрядной машине с Windows произойдет сбой. Я знаю, что где-то делаю глупую ошибку, и может ли кто-нибудь указать мне на это. :п. Я также объявил функцию в моем заголовке, поэтому я знаю, что это не та ошибка.
Обратите внимание, что я подверг цензуре имена и номера переменных, потому что проблема, в которой находится эта функция, еще не для публичного выпуска.
Функция:
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 ++ поддерживает его как расширение). Есть связанный, несколько технический вопрос по этому поводу. Вы можете просто использоватьunsigned(...)
или(unsigned int)(...)
. - person James McNellis   schedule 23.06.2010int
- это 32 бита в компиляции Visual C ++ для 64-битного приложения, поэтомуunsigned int(inputFrac * 2e32)
будет бессмысленным и почти наверняка равным 0. Это не должно вызывать сбой, но в любом случае это может быть ошибка. Кроме того, 2209032000 - бессмысленное магическое число, аmessageTimeFraction
не используется. Если это не полная функция, сообщите нам об этом. - person David Thornley   schedule 23.06.2010