我最近写了一些代码,在某些情况下,可能会将Nullpointer传递给fwrite
。
尽管它可以在Windows上运行,但我想知道它是否可能在其他平台上引起问题,或者是否有阻止它的措施。
我是怎么产生这种困惑的;):
std::vector<unsigned char> bytes;
// ...
// bytes could be filled but may be empty.
const char* bytesToWrite = (const char*) bytes.data(); // .data() will return NULL if empty
unsigned long count = bytes.size();
if (count == fwrite(bytesToWrite, 1, count, handle)) //...
最佳答案
从Microsoft documentation:
因此它可以在Windows中使用(嗯,您会得到一个显式错误,而不是很大的崩溃,但这仍然不是很有用)。但是在Unix / Linux中没有这种情况的痕迹,所以不要依赖它。始终事先进行测试:
if (buffer != NULL) { fwrite(buffer, ...
或使用
assert(buffer != NULL)
将未定义的行为转变为已定义的行为。