значение int изменяется от 0 до 32679 без изменений - PullRequest
0 голосов
/ 20 августа 2011

У меня действительно очень странная проблема, которую я просто не могу понять.Итак, вы можете посмотреть, вот мой код;

point * findLongPaths(point * points, double threshold_distance) {
    int i = 0;
    int pointsAboveThreshold = countPointsAboveThreshold(points, threshold_distance);

    point * pointsByThreshold = new point[sizeof(points)];
    pointValues * pointsToCalculate = new pointValues[pointsAboveThreshold];
    //pointValues pointsToCalculate[pointsAboveThreshold];
    //point orderedPoints[pointsAboveThreshold];

    while (points[i].end != true) {
        point pointOne = points[i];
        point pointTwo = points[i + 1];

        //Check to see if the distance is greater than the threshold, if it is store in an array of pointValues
        double distance = distanceBetweenTwoPoints(pointOne, pointTwo);
        if (distance > threshold_distance) {
            pointsToCalculate[i].originalLocation = i;
            pointsToCalculate[i].distance = distance;
            pointsToCalculate[i].final = pointTwo;

            //If the final point has been calculated, break the loop
            if (pointTwo.end == true) {
                pointsToCalculate[i].end = true;
                break;
            } else {
                pointsToCalculate[i].end = false;
                i++;
            }
        } else if (points[0].end == true || pointsAboveThreshold == 0) {
            //If there is no points above the threshold, return an empty point
            if (points[0].end == true) {
                point emptyPoint;
                emptyPoint.x = 0.0;
                emptyPoint.y = 0.0;
                emptyPoint.end = true;

                pointsByThreshold[0] = emptyPoint;
                return pointsByThreshold;
            }
        }
        i++;
    }
    i = 0;

    //Find the point with the lowest distance
    int locationToStore = 0;

    while (pointsToCalculate[i].end != true) {

Моя проблема в том, что значение i буквально изменяется от 0 до 32679. Первоначально оно было установлено в j, поэтому использовалось другое значениедо того, что было в цикле while, но я попробовал это с i, чтобы увидеть, изменит ли это что-либо.Однако, если я поставлю точку останова за несколько строк до нее, она останется нулевой.Если я запускаю его без каких-либо точек останова, он меняет значение на 32679.

Почему это так?Это действительно странно, и я понятия не имею, как это исправить?

1 Ответ

2 голосов
/ 20 августа 2011

Несколько вещей, которые я заметил, могут помочь:

  • new point[sizeof(points)] почти наверняка неверно, так как sizeof(points) не равно количеству элементов в массиве, но является размером указателя(обычно 4 или 8).Если вам нужен размер points[], либо передайте его в функцию в качестве другого параметра, или, что еще лучше, используйте стандартный контейнер (например, std::vector<> или любой другой, который вам подходит).
  • Ваш pointsToCalculateмассив выделяется с pointsAboveThreshold элементами, но затем вы получаете доступ к нему с i.Если i когда-либо превысит pointsAboveThreshold (что почти наверняка будет), вы переполните массив, и произойдут плохие вещи, возможно, включая перезапись i.Я подозреваю, что это ваша проблема без дополнительной информации и подробностей.
  • Когда distance > threshold_distance и pointTwo.end == false вы увеличиваете i в два раза (это может быть предусмотрено, но вы хотели упомянуть об этом в случае).
  • else if (points[0].end == true...) никогда не может быть истинным, как если бы это было внешним while (points[i].end != true) было бы ложным, и цикл никогда не входил.Я не уверен в вашей намеченной логике, но подозреваю, что вы хотите этого вне цикла while.
...