我正在尝试创建一组数字的哈希表。我正在用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;
}
我真的不知道如何解释为什么以及如何发生访问冲突错误。我在代码中将其指出为评论。我在调试程序时遇到了这个问题。我访问数组中的指针元素的方式看起来很奇怪。我想我做得不对。我要做的就是创建一个空指针数组,它实际上是每个索引的链表的头部。
你能帮我正确地帮我吗?我很确定我在某处做指针算法错误。非常感谢你的帮助。
答案 0 :(得分:1)
edgePixelTable[fileID][0]->row
应该成为(*edgePixelTable)[fileID]->row
您传递了表的地址,因此在访问之前需要取消引用它。这是因为edgePixelTable
的类型为edgePixel***
,并指向edgePixel**
类型的单个元素。当你执行edgePixelTable[fileID]
时,你引用过去的记忆实际上是指向。
因此,您的seg错误是您的代码具有未定义行为的结果。