在c++中向哈希表中添加项会产生访问冲突异常
Adding items to hash table in c++ gives access violation exception
我正在尝试创建一组数字的哈希表。我正在用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;
}
我真的不知道如何计算为什么以及如何访问冲突错误发生。我在代码的注释中指出了这一点。我在调试程序时遇到了这个问题。此外,我访问数组中的指针元素的方式看起来很奇怪。我觉得我做得不对。我所要做的就是创建一个空指针数组,它实际上是每个索引处链表的头。
你能帮我正确地做这个吗?我很确定我做指针算术错误的地方。非常感谢你的帮助。
edgePixelTable[fileID][0]->row
应改为(*edgePixelTable)[fileID]->row
传递表的地址,因此在访问它之前需要对它解引用。这是因为edgePixelTable
是edgePixel***
类型的,并且指向edgePixel**
类型的单个元素。当你执行edgePixelTable[fileID]
时,你引用的内存实际上是指向。
所以你的seg错误是你的代码有未定义行为的结果。
相关文章:
- 写入访问冲突异常
- 在C++中删除双向链表的头节点后出现访问冲突异常
- Visual Studio图形调试器引发读取访问冲突异常
- 尝试将 std::cerr 重定向到文件时出现访问冲突异常
- 媒体基础:读取示例 - 访问冲突异常
- 链表的访问冲突异常
- 进入函数之前的访问冲突异常
- 删除函数 c++ 的读取访问冲突异常
- 无法使用 C++ catch(..) 捕获访问冲突异常
- 在Visual Studio Community中使用glfw3 glew和opengl获取访问冲突异常
- 访问动态 2D 字符数组时引发访问冲突异常
- 从静态库使用 Boost Asio 时访问冲突异常
- 为什么访问冲突异常不能被 捕获.NET4.0.
- glGenBuffers 访问冲突异常
- unsigned char*导致访问冲突异常
- 注入DLL的函数中出现访问冲突异常(5)
- 删除二叉搜索树中的节点中的 Visual Studio 中的访问冲突异常
- 提升 Asio tcp::接受者访问冲突异常
- 在 .Net 应用程序中调用 C++ DLL 时出现系统访问冲突异常
- 为什么此代码会引发访问冲突异常