任我冰鸟 2015-10-26 16:23 采纳率: 0%
浏览 1656
已结题

void的函数调用完后再return时出现了错误

//本函数用于---- - 利用新加入EP的解去更新信息素矩阵
//tau:cell变量含有K个信息素矩阵,newinEP记录新加入EP的编号
//g保存的是所有objectives对应的g值,gmin是g中最小的

#include"HEAD.h"
int Tau_update2(vector > > &tau, double(*wets)[M], vectornewinEP, vector >chroms)
{
double weights[colonysize][M];
for (int i = 0; i < colonysize; ++i)
for (int j = 0; j < M; ++j)
weights[i][j] = wets[i][j];
int size = chroms.size();
vector > temp;
for (int i = 0; i < chroms.size(); ++i)
{

vector temp_temp;
for (int j = 0; j < M; ++j)
temp_temp.push_back(chroms[i][N + j]);
temp.push_back(temp_temp);
temp_temp.erase(temp_temp.begin(),temp_temp.end());

}
vector<double> g;
vector<vector<double> >weigh;
for (int i = 0; i < size; ++i)
{
    vector<double> f(weights[i],weights[i]+M);
    weigh.push_back(f);
    f.erase(f.begin(), f.end());
}
evaluate_g(temp, weigh, g);
weigh.clear();
vector<vector<double> >().swap(weigh);
double min_g = *min_element(g.begin(), g.end());
gmin = min(min_g, gmin);

int num_newinEP = newinEP.size();

vector<double> w1(N, 0);
vector<vector<double> >w;
for (int i = 0; i < N; ++i)
    w.push_back(w1);
w1.clear();
vector<double>().swap(w1);


double tau_max = (double)(num_newinEP + 1) / ((1 - Rho)*(1 + gmin));
double tau_min = tau_max / (2 * N);
Delta = 0.05*tau_max;

double f[K][N][N];
for (int k1 = 0; k1 < K; ++k1)
    for (int i1 = 0; i1 < N; ++i1)
        for (int j1 = 0; j1 < N; ++j1)
            f[k1][i1][j1] = tau[k1][i1][j1]*Rho;


for (int i = 0; i < num_newinEP; ++i)
{
    int group_index = ceil((double)(newinEP[i] * K) / colonysize);
    for (int j = 0; j < N; ++j)
    {
        int m = (int)chroms[newinEP[i]][j];
        w[j][m] = 1;
    }

    double t = 1 / (1 + g[newinEP[i]]);
    for (int k = 0; k < N; ++k)
        for (int l = 0; l < N; ++l)
        {
        f[group_index][k][l] += (w[k][l]+w[l][k]) * t;
        }

}

//MAX-MIN
for (int j2 = 0; j2 < K; ++j2)
{
    for (int k2= 0; k2 < N; ++k2)
        for (int l2 = 0; l2 < N; ++l2)
        {
        if (f[j2][k2][l2]>tau_max)
            f[j2][k2][l2] = tau_max;
        if (f[j2][k2][l2] < tau_min)
            f[j2][k2][l2] = tau_min;
        }
}

for (int k3 = 0; k3 < K; ++k3)
    for (int i3 = 0; i3 < N; ++i3)
        for (int j3 = 0; j3< N; ++j3)
            tau[k3][i3][j3] = f[k3][i3][j3];

return 0;

}


其中K=5,colonysize=50,N=62
图片说明
在中断时指向到95行的return语句上。
为什么会出现这种情况,在哪出现错误?
查百度是说指向空指针,可为什么没发现?
求大神指教

  • 写回答

2条回答 默认 最新

  • threenewbee 2015-10-26 22:09
    关注

    代码太多就不看了,估计是你数组越界,或者指针没有分配,结果破坏了堆栈,于是返回的时候就出错了。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题