WTHunt 2016-03-09 11:19 采纳率: 30.8%
浏览 1662
已结题

关于内存delete报错的问题,以下代码在最后delete的时候

(safe_deletevec是宏定义,如果指针不等于NULL,就删除并置NULL),就会报错,说是写入冲突,应该没有越界,可是就是想不通为什么出错,麻烦各位给些建议

short Nobone=m_sMinValue+50;
int m_nValueMax=0;
for(int i = 0; i < m_nOriImagePiece; i++)
{
int k = i*m_nWidth*m_nHeight;
for (int m = 0; m < m_nHeight; m++)
{
int v = m*m_nWidth + k;
for (int n = 0; n < m_nWidth; n++)
{
int a = ((short*)m_pProcessArray->GetDcmArray()[i]->GetData())[m_nWidth*m + n];
if (a>Nobone)
{
short m_nRadi = EDTdate[v+n];
if (m_nRadi>m_nValueMax)
m_nValueMax = m_nRadi;
}
}
}
}

m_nValueMax = m_nValueMax + 1;
short* occurs = new short[m_nValueMax];
memset(occurs , 0 ,sizeof(short)*m_nValueMax);

for(int i = 0; i < m_nOriImagePiece; i++)
{
    int k = i*m_nWidth*m_nHeight;
    for (int m = 0; m < m_nHeight; m++)
    {
        int v = m*m_nWidth + k;
        for (int n = 0; n < m_nWidth; n++)
        {
            int a = ((short*)m_pProcessArray->GetDcmArray()[i]->GetData())[m_nWidth*m + n];
            if (a>Nobone)
            {
               short m_nRadi = EDTdate[v+n];
               occurs[m_nRadi] = 1;
            }
        }
    }
}

numRadii = 0;
for (int i=0;i<m_nValueMax;i++)
{
    if (occurs[i])
        numRadii++;
}
//make an index of the distance-squared values
short* distSqIndex = new short[m_nValueMax];
memset(distSqIndex,0,sizeof(short)*m_nValueMax);
short* distSqValues = new short[numRadii];
memset(distSqValues,0,sizeof(short)*numRadii);
int indDs = 0;
for (int i=0;i<m_nValueMax;i++)
{
    if (occurs[i])
    {
        distSqIndex[i] = indDs;
        distSqValues[indDs++]=i;
    }
}
Safe_DeleteVec(occurs);
  • 写回答

4条回答

  • cxsmarkchan 2016-03-09 11:37
    关注

    检查两个地方:
    1. short m_nRadi = EDTdate[v+n];得到的m_nRadi是否可能越界
    2. occurs指向数组,删除时应该是delete[] occurs而不是delete occurs
    希望对你有帮助。

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?