user-0 提问: realloc引起程序触发断点，请教各位大神。

回复:
user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。我调试了啊，这不是调试不出来么，，

user: user-1
content: 其他位置的越界访问，特别是越界赋值，也可能影响这儿

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 是否r->number的值太大了，或者根本是一个无效值，有侦测过没？

user: user-0
content: 引用 7 楼 wang0635 的回复:其他位置的越界访问，特别是越界赋值，也可能影响这儿我又试了下，把realloc改成free和malloc。发现free的时候没问题，而是malloc时引发了断点。

user: user-0
content: 引用 7 楼 wang0635 的回复:其他位置的越界访问，特别是越界赋值，也可能影响这儿 相关代码，结构体定义跟贴出来的一样。  void InsertRequest(int i, route *r)//将请求i中的点插入到路径r中去,并返回该请求的旅行时间; { 	request re = Request[i];//找出是哪个请求; 	int number = r->number;//确定路径中现在有多少个点; 	r->t= (task *)realloc(r->t, sizeof(task)*(number+2));//每加入一个请求会有两个点插入所以空间加2; 	r->number += 2;//点的个数+2; 	r->q += Dot[Request[i].origin].g+Dot[Request[i].end].g; 	double a;//临时变量存储各个点的到达时间; 	a = (r->t + number - 2)->D +CaTime((r->t + number - 2)->number, re.origin);//上一点到新插入请求起点的时间; 	(r->t + number - 1)->number = re.origin;//将新加入的请求插到最后; 	(r->t + number - 1)->b = Max(a, Dot[re.origin].e);//计算开始时间 	(r->t + number - 1)->D = (r->t + number - 1)->b+Dot[re.origin].d;//计算离开时间 	(r->t + number - 1)->w = Max(0, Dot[re.origin].e-a);//计算等待时间 	a = (r->t + number - 1)->D + CaTime((r->t + number - 1)->number, re.end);//上一点到新插入请求起点的时间; 	(r->t + number)->number = re.end;//记录点的编号; 	(r->t + number)->b = Max(a, Dot[re.end].e);//计算开始时间; 	(r->t + number)->D = (r->t + number)->b + Dot[re.end].d;//计算离开时间 	(r->t + number)->w = Max(0, Dot[re.end].e - a);//计算等待时间;  	a = (r->t + number)->D + CaTime((r->t + number)->number, 0);//上一点到新插入请求起点的时间; 	(r->t + number + 1)->number = 0;//最后一个点是停车场; 	(r->t + number+1)->b = a;//令回到停车场时间为a; 	(r->t + number+1)->D = a;//令回到停车场时间为a; 	(r->t + number+1)->w = 0;//等待时间必为0; 	//设置旅行时间; 	(r->t+number)->l=(r->t + number)->b - (r->t + number - 1)->D ;//该请求的记录在终点旅行时间; 	(r->t + number - 1)->l = 0;//起点的旅行时间设置为0; 	(r->t + number + 1)->l = a;//即回到停车场的时间;  } void InitSolution(solution *s) { 	int i; 	for (i = 0; i < M; i++)//对解s，初始化每条路径; 	{ 		(*s).r[i].q = 0;//载重量初始值为0; 		(s->r+i)->t = (task *)malloc(sizeof(task) * 2);//先为起点和终点的depot分配空间; 		(*s).r[i].t[0].number = 0; (*s).r[i].t[0].b = 0; (*s).r[i].t[0].w = 0; 		(*s).r[i].t[0].l = 0; (*s).r[i].t[0].D = 0;		//初始化路径;  		(*s).r[i].t[1].number = 0; (*s).r[i].t[1].b = 0; (*s).r[i].t[1].w = 0; 		(*s).r[i].t[1].l = 0; (*s).r[i].t[1].D = 0;		 		(*s).r[i].number = 2;//现在每条初始路径均只包括两个depot点 		(*s).r[i].dis = 0;//距离为0 		(*s).r[i].f = 0;//适应度为0; 		(*s).r[i].q = 0;//载重量为q; 		InitTabuList(s->r + i);//初始化禁忌表为0; 	}  	int vehicleNumber; 	attr tempAttr; 	InitAttrCount(s->attrCount);//初始化属性计数变量; 	for (i = 0; i < N; i++)//对每个请求从i=0-N-1进行分配; 	{ 		vehicleNumber=RandInt(M)-1;//返回一个1-M的值，再减一，表示车辆编号：0-M-1; 		InsertRequest(i, s->r+vehicleNumber);//将第i个请求插入到车辆编号为vehicleNumber的路径中; 		tempAttr.i = i;//请求为i 		tempAttr.k = vehicleNumber;//服务车辆为k 		AddAttr(s, tempAttr);//将属性加入到解中; 		AttrCount(s->attrCount, i, vehicleNumber);//计算pik 	} 	for (int i = 0; i < M; i++) 	{ 		(s->r+i)->f=ComputeV((s->r + i)); 		s->fit += (s->r + i)->f; 	} } void main() { 	Request = (request *)malloc(sizeof(request)*N);//共有N个请求; 	Dot = (dot *)malloc(sizeof(dot)*(2 * N + 1));//共有2N+1个点; 	ReadInfo();//读取文件信息; 	route *globalR;//存储全局最优解; 	int globalFit=10000;//存储全局最优值; 	globalR = (route *)malloc(sizeof(route)*M); 	solution *s;//初始种群s; 	s = (solution *)malloc(sizeof(solution)*POPU_SIZE); 	int i,j;//循环变量;  	for (i = 0; i < POPU_SIZE; i++) 	{ 		s[i].r = (route *)malloc(sizeof(route)*M);//每个解共有M条路径; 		s[i].fit = 0;//初始解的适应度其实可以看做为fit，因为违背时间窗约束则不可行; 		s[i].a = (attr *)malloc(sizeof(attr)*N);//属性值共有N个; 		s[i].attrCount = (int *)malloc(sizeof(int)*(N*M));//属性值共有M*N个,用来计算每个属性加入到解s的次数pik; 		s[i].attrNumber = 0;//初始化解中的属性个数; 		InitSolution(s+i);//初始化每条路径; 	}//至此每条路径初始化完成; 	for (i = 0; i < MAX_GEN; i++)//迭代次数; 	{ 		for (j = 0; j < POPU_SIZE; j++) 		{ 			NeighborSearch(s+j); 			if ((s + j)->fit < globalFit) 			{ 				RecordGlobal((s + j)->r, globalR); 			} 		} 		if (i%K == 0 && i!=0) 		{ 			IntraSearch(s+i); 		} 		 	}  	 } 只看main和InitSolution即可。

user: user-0
content: 引用 7 楼 wang0635 的回复:其他位置的越界访问，特别是越界赋值，也可能影响这儿 检查了，没有。是其他变量的越界也会影响吗？如果是t的话，这是第一次用。

user: user-0
content: 引用 4 楼 wang0635 的回复:检查对 t 的使用是否曾经越界除了上面贴的赋初始值用到就再也没用到了。

user: user-0
content: 引用 4 楼 wang0635 的回复:检查对 t 的使用是否曾经越界 没有这事第一次使用

user: user-1
content: 检查对 t 的使用是否曾经越界

user: user-0
content: 连续顶三次最多

user: user-0
content: 各路大神快来，要疯了

user: user-0
content: 自己顶一个吧