[使用结构指针的c ++分段错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[使用结构指针的c ++分段错误相关的知识,希望对你有一定的参考价值。
我有一个叫做Dictionary的类,它包含一个键-值对,一个指向该键-值对的指针,以及一个保存字典大小的int。
template<typename K, typename V>
class Dictionary
{
public:
V& operator[](K key);
private:
struct KeyValue
{
K key;
V value;
}; //the key-value pair struct
KeyValue* array; //pointer to an array of items (the key-value pairs)
int size; //size of the dictionary (i.e. the array size)
};
我正在尝试重载此类的[]运算符,当这样做时,我会遇到分段错误错误
template<typename K, typename V>
V& Dictionary<K,V>::operator[](K key){
for (size_t i = 0; i < size; i++) {
if (key == array[i].key) {
return array[i].value;
}
}
array[size].value = 0;
size++;
return array[size-1].value;
}
我相信此行中发生段错误
array[size].value = 0;
但是,我不知道为什么会这样。任何帮助是极大的赞赏。谢谢!
答案
[当C和C ++中的数组具有N
元素时,有效索引为:0, 1, 2, ... N-1
。相反,N
不是有效的索引:它是[[past数组的结尾。
array
的last
元素是array[size - 1]
:array[0] // first element
array[1] // second element
// ...
array[size - 2] // second-to-last element
array[size - 1] // last element
array[size] // error: beyond the last element
使用数组的末尾,并导致分段错误。array[size]
正在访问beyond
以上是关于[使用结构指针的c ++分段错误的主要内容,如果未能解决你的问题,请参考以下文章