在c ++中向哈希表添加项目会导致访问冲突异常

时间:2016-11-06 06:34:53

标签: c++

我正在尝试创建一组数字的哈希表。我正在用C ++进行过程编程。这是我的代码:

//以下结构是全局定义的

struct edgePixel{
    int row;
    int col;
    int intensity;
    edgePixel *nextPixel;
};

void Function1 (....other parameters not related to hashtable....){

// Declare and initialize hashtable
edgePixel **edgePixelTable = new edgePixel*[fileCounter];

   for(int i = 0; i<fileCounter; i++){
       edgePixelTable[i] = new edgePixel;
       edgePixelTable[i]->row = -1;
       edgePixelTable[i]->col = -1;
       edgePixelTable[i]->intensity = -1;
       edgePixelTable[i]->nextPixel = NULL;     
    }
    function2(..., index, &edgePixelTable);
}

void function2(..., int index, edgePixel ***edgePixelhistogram){
//Calculations of row, col, intensity and index
//......
//......
    addPixel(row, col, intensity, index, edgePixelhistogram);
}

void addPixel(int row, int col, int intensity, int fileID, edgePixel ***edgePixelTable){

    if (edgePixelTable[fileID][0]->row == -1){ //<--- Access violation happens right here
       edgePixelTable[fileID][0]->row = row;
       edgePixelTable[fileID][0]->col = col;
       edgePixelTable[fileID][0]->intensity = intensity;
       edgePixelTable[fileID][0]->nextPixel = NULL;
    }
    else{
       edgePixel *tempPtr = edgePixelTable[fileID];
       edgePixel *newNode = new edgePixel;
       newNode->row = row;
       newNode->col = col;
       newNode->intensity = intensity;
       newNode->nextPixel = NULL;
       while(tempPtr->nextPixel!=NULL){
          tempPtr = tempPtr->nextPixel;
       }
       tempPtr->nextPixel = newNode;
    }

我真的不知道如何解释为什么以及如何发生访问冲突错误。我在代码中将其指出为评论。我在调试程序时遇到了这个问题。我访问数组中的指针元素的方式看起来很奇怪。我想我做得不对。我要做的就是创建一个空指针数组,它实际上是每个索引的链表的头部。

你能帮我正确地帮我吗?我很确定我在某处做指针算法错误。非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

edgePixelTable[fileID][0]->row应该成为(*edgePixelTable)[fileID]->row

您传递了表的地址,因此在访问之前需要取消引用它。这是因为edgePixelTable的类型为edgePixel***,并指向edgePixel**类型的单个元素。当你执行edgePixelTable[fileID]时,你引用过去的记忆实际上是指向。

因此,您的seg错误是您的代码具有未定义行为的结果。