我最近写了一些代码,在某些情况下,可能会将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)将未定义的行为转变为已定义的行为。

10-07 19:07
查看更多