【发布时间】:2010-08-05 21:46:47
【问题描述】:
在 C 或 C++ 中,不检查数组是否越界。解决此问题的一种方法是将其与结构一起打包:
struct array_of_foo{
int length;
foo *arr; //array with variable length.
};
然后,就可以初始化了:
array_of_foo *ar(int length){
array_of_foo *out = (array_of_foo*) malloc(sizeof(array_of_foo));
out->arr = (foo*) malloc(length*sizeof(foo));
}
然后访问:
foo I(array_of_foo *ar, int ix){ //may need to be foo* I(...
if(ix>ar->length-1){printf("out of range!\n")} //error
return ar->arr[ix];
}
终于解放了:
void freeFoo(array_of_foo *ar){ //is it nessessary to free both ar->arr and ar?
free(ar->arr); free(ar);
}
这样它可以警告程序员越界。但是这种包装会大大减慢性能吗?
【问题讨论】:
-
如果你使用 C++,你应该使用 std::vector。并且更少考虑性能。
-
我们在这件事上听起来像是破纪录,但你的意思不是 c 就是 c++:这些语言不仅提供不同的功能,而且它们带有不同的文化和习语。请明确您对哪个感兴趣。
-
@kiamlaluno @SoapBox 不要重新标记或编辑问题以改变其含义。谢谢。
-
我只是从标题中删除了标签;我没有改变问题的意思。
标签: c++ c performance arrays struct