【发布时间】:2015-12-14 17:34:35
【问题描述】:
我需要通用方法来检查 void * 是否包含 0 到 num_bytes。
我想出了以下方法。 *p 每次都不包含相同类型的数据,因此不能做*(type*)p
bool is_pointer_0(void *p, int num) {
void *cmp;
cmp = (void*)malloc(num);
memset(cmp, 0, num);
if (memcmp(p, cmp, num)) {
free(cmp);
return false;
} else {
free(cmp);
return true;
}
}
该函数在每次调用时分配并释放 num 个字节,我认为这不太好。 请提出更快的方法。感谢您的帮助。
更新:
这种方法怎么样?
bool is_pointer_0(void *p, int num) {
void *a = NULL;
memcpy(&a, p, num);
return a == NULL;
}
【问题讨论】:
-
如果我是你,我会在你陷入“使用向量”cmets 之前删除 C++ 标签。
-
不,标记你实际使用的语言,否则你会得到错误的答案。
-
您需要定义什么对您来说“更好”:更简单?快点?预包装?
-
希望采用更快的方法,但循环似乎不可避免。
-
如果您担心性能问题,您可以对大
n进行矢量化检查。
标签: c void-pointers