lzysyy 2022-10-27 16:18 采纳率: 80%
浏览 19
已结题

关于创建指针数组来实现对一个二维数组,结果出现段错误

关于创建指针数组来实现对一个二维数组的描述,编译之后出现段错误,并提示了Process returned -1073741819 (0xC0000005)

template<int guide_candidate_mem>
class Guide_Candidate_Part 
{      
private:
    uint8_t counter_size,shift; 
    uint32_t mask,counter_max,buf,adj_val;
    int h, w = guide_candidate_mem* 1024/4; //w是计数器大小8bit的行计数器数量,实为*1024*8/4/8
    uint32_t *counters[4];  
    int idx[d],val[d];
    uint32_t min_value = 1 << 30;
    BOBHash32 * hash[d]; //两个哈希  
public:
Guide_Candidate_Part() {}  
    Guide_Candidate_Part(uint32_t in_w,uint32_t in_h, uint8_t in_counter_size,uint32_t random_seed) //属性
    {
        init(in_w, in_h, in_counter_size, random_seed);  
    }
    ~Guide_Candidate_Part() { clear(); }  //析构函数

    void init(uint32_t in_w, uint32_t in_h, uint8_t in_counter_size,uint32_t random_seed){
        w= in_w,h = in_h, counter_size = in_counter_size;  
        counters[0]=new uint32_t[4*w];  //将指针数组指向了行一维数组的首地址,并分配4W个大小的内存空间
        counters[1]=new uint32_t[4*w];
        counters[2]=new uint32_t[2*w];
        counters[3]=new uint32_t[w];//这已经声明了数组的计数器类型是uint32_t

        mask = counter_max = (1u << counter_size) - 1;     
        
        srand((unsigned)time(NULL));
        std::random_device rd;  //产生不同的随机数种子
        for(int i =0; i< d; i++)
            hash[i] = new BOBHash32(rd());  
    }

    void clear()
    {
        for(int j=0; j< 4; j++)
            delete[]counters[j]; 
        if(hash) delete [] hash;
    }

之后为了对该二维数组其中的一维实现两次哈希操作,结果数据集跑了一部分之后发生了段错误,调试的话没有指出具体哪块发生问题,只是显示哈希部分错误,如图所示

img

img

想知道是哪块代码出问题了,感觉还是二维数组以及指针数组的问题

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-10-27 16:33
    关注

    if(hash) delete [] hash;
    这是不对的。hash不是动态分配的数组,但hash的元素是动态分配的指针。你得和counters一样,用循环来释放

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 10月27日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能