我正在为SA-MP编写一个插件,基于AMX,并且出现了一个烦人的问题。我正在使用一个deque和一个函数来查找&删除一个元素。 (像下面这样)std :: deque - 下标超出范围
enum PARAM_TYPE {
PARAM_TYPE_CELL,
PARAM_TYPE_ARRAY,
PARAM_TYPE_STRING,
};
struct params_s {
enum PARAM_TYPE type;
struct params_s * next;
cell free;
cell numData;
cell arrayData[0];
};
struct timer_s {
AMX * amx;
int id, func, interval, repeat;
long long unsigned int trigger;
struct params_s * params;
};
std::deque<struct timer_s *> gTimers;
void DestroyTimer(struct timer_s * t) {
for (int i = 0; i != gTimers.size(); ++i) {
if (t == gTimers[i]) {
gTimers.erase(gTimers.begin() + i);
break;
}
}
}
每当我打电话DestroyTimer()我得到这个错误:
Debug Assertion Failed!
Expression: deque subscript out of range
我可以添加元素,读取和修改他们,但我不能删除它们。
谢谢。
你在做什么似乎完全复杂的东西这么简单。 'std :: find' +'deque :: erase'或者更好的Erase-Remove Idiom有什么问题?另外,你确定你不需要调用'delete'吗? – pmr