Eva*_*oll 3 c pointers size-t errata ptrdiff-t
在这篇由Andrey Karpov撰写的题为"关于size_t和ptrdiff_t"的博客文章中,他展示了一个例子,
for (ptrdiff_t i = 0; i < n; i++)
a[i] = 0;
Run Code Online (Sandbox Code Playgroud)
但是,我不确定这是否正确,似乎应该如此
for (size_t i = 0; i < n; i++)
a[i] = 0;
Run Code Online (Sandbox Code Playgroud)
它是否正确?
我知道我们也应该使用类似的东西memset,但让我们完全避免这种情况.我只问这种类型
在博客文章中,我认为你应该总是避免分配大于PTRDIFF_MAX(*)的内存块,因为这样做会使像Clang和GCC这样的编译器产生无意义的代码,即使你没有以某种方式减去指向该块的指针.导致结果溢出.
(*)即使malloc成功传递的值大于PTRDIFF_MAX.问题的关键在于GCC和Clang只生成与这样的链接时行为正确的代码malloc,但Glibc提供的malloc函数不实现此限制.
如果您遵循该约束(我鼓励您:这是博客文章的消息),那么这两种类型都是同样正确的.
这就是说,因为只需要表示正偏移量,size_t因此在您的示例中将是自然选择.
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |