[使用结构指针的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 ++分段错误的主要内容,如果未能解决你的问题,请参考以下文章

使用多个结构的分段错误

使用C中的结构进行分段错误

在运行非常旧的C代码时遇到分段错误

C - 指向结构指针的指针 - 分段错误

使用结构和指针的分段错误(核心转储)

在Linux机器上运行C代码时出现分段错误(核心转储)[关闭]