Инициализация вектора переписать структурный указатель - PullRequest
0 голосов
/ 28 марта 2019

Ошибка при выполнении кода: Поток 2: EXC_BAD_ACCESS

В отладчике:

Before vector init:
*durationMatrix const int64_t *const    0x102ce5650 0x0000000102ce5650
After:
*durationMatrix const int64_t *const    NULL    0x0000000000000000

slv.hpp

struct RoutingData {
    int locationsCount;
    int64_t const * const * distanceMatrix;
    int64_t const * const * durationMatrix;
};

main.cpp

void Solve(const struct RoutingData *routingData) {
std::vector<std::vector<int64>> durations (routingData->locationsCount, std::vector<int64>(routingData->locationsCount, 0LL));
    for (std::size_t fromNode = 0; fromNode <  routingData->locationsCount; fromNode++) {
        for (std::size_t toNode = 0; toNode <  routingData->locationsCount; toNode++) {
            durations[fromNode][toNode] = routingData->durationMatrix[fromNode][toNode];
        }
    }

}

Или

void Solve(const struct RoutingData *routingData) {
    std::vector<std::vector<int64>> durations (routingData->locationsCount, std::vector<int64>(routingData->locationsCount, 0LL));
    printf("%lld\n", routingData->durationMatrix[0][0]);
}

Но этот код работает нормально:

main.cpp

void Solve(const struct RoutingData *routingData) {
    printf("%lld\n", routingData->durationMatrix[0][0]);
}

Функция решения, вызываемая из Swift:

var s = RoutingData()
        s.locationsCount = Int32(self.distanceResponse.distances.count)
        s.distanceMatrix = UnsafePointer(self.distanceResponse.distances.map{UnsafePointer($0.map{Int64($0)})})
        s.durationMatrix = UnsafePointer(self.distanceResponse.durations.map{UnsafePointer($0.map{Int64($0)})})
        Solve(&s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...