从字典初始化Python的Seg错误



所以我正在做一个项目,处理大量的车辆和这些车辆之间的传输。我有一个工作代码,可以很好地用于少量车辆,但当我开始使用大量~500辆车辆时,程序将在大约一半的时间内出现故障。我使用faulthandler()回溯了seg错误,字典初始化是程序当前错误的地方。下面是字典初始化的代码:

for j in range(self.num_vehicles):  # for each vehicle
if self.timeIndex == 0:
self.vehicles[j].pseudo_random_number(0)
self.seconds = []
for j in range(500):
mso = self.vehicles[j].full_mso_range()
vehicle_transmissions = []
for k in range(500):
vehicle_transmissions.append(0)
# Iterate through all of the other vehicles besides vehicle j
for k in range(j+1, j+500):
distance = float(np.ceil(np.sqrt(
(self.vehicles[j].position[0] - self.vehicles[k % self.num_vehicles].position[0]) ** 2.0 +
(self.vehicles[j].position[1] - self.vehicles[k % self.num_vehicles].position[1]) ** 2.0 +
(self.vehicles[j].position[2] - self.vehicles[k % self.num_vehicles].position[2]) ** 2.0)))

transmission = {"receiverID": int(k%500),
"distance": 0,
"receivedpower": 0,
"successfuldecode": 0}

vehicle_transmissions[transmission["receiverID"]] = transmission  # store transmission
self.vehicles[j].transmissions = vehicle_transmissions.copy()  # save transmission to vehicle
self.vehicles[j].frame += 1  # increase frame
self.seconds.append(mso)  # record MSO in a list that helps with collisions

Seg Fault发生在分配传输的地方。我试着简化分配,试着隔离故障,但到目前为止我还没有运气。如有任何建议,不胜感激。

这段代码也是通过c++代码调用的,gdb只告诉我在这个函数中发生了seg错误。

问题最终是python到c++接口中的错误。它只发生在有大量调用时,它似乎失去了它在内存中的位置,当它访问那个点时再次遇到错误。最后我用c++写了完整的代码来解决这个问题。如果有人读到这篇文章,那么更容易从c++调用Python而不是Python调用c++。

最新更新