Использование неинициализированного значения $ d в делении {/} в

Во вторую часть вопроса: Обратите внимание, что sizeof (void *)! = sizeof (void). В 32-битной дуге sizeof (void *) составляет 4 байта, поэтому p ++ будет установлен соответствующим образом. Величина, на которую увеличивается указатель, зависит от данных, на которые он указывает. Таким образом, он будет увеличен на 1 байт.

0
задан John Kugelman 19 March 2019 в 12:56
поделиться

1 ответ

Я не могу воспроизвести вашу ошибку. Однако в вашем коде много ошибок, поэтому позвольте мне их просмотреть, и, надеюсь, это поможет вам найти вашу реальную ошибку.

Во-первых, переменные должны быть определены в наименьшей возможной области видимости: если переменная используется только внутри функции, она должна быть определена внутри этой функции. Если переменная используется только в цикле for, она должна быть определена в этом цикле. В этом духе вы должны удалить

my $i;
my $j;

в начале вашего кода. Также имейте в виду, что my объявляет лексическую переменную, видимую только в текущей области (то есть , т.е. вы можете использовать ее только в текущем блоке). Например,

else {
    my $X_branch=$X2;
    my $Y_branch=$Y2;
    my $Z_branch=$Z2;
}

объявляет 3 переменные, которые не существуют после блока else.

Во-вторых, my объявляет новую переменную и поэтому должна использоваться только один раз для каждой переменной. Если вы напишите

my $x = 5;
return my $x;

В первой строке будет объявлена ​​переменная $x и задано значение 5. Вторая строка объявляет новую переменную $x (таким образом, затеняя старую) со значением undef и возвращает ее. Вместо этого вы хотите написать:

my $x = 5;
return $x;

Теперь позвольте мне пройтись по вашему коду, чтобы указать на несколько ошибок / улучшений:

  • [1114 ] должно быть $X_list[$j] (согласно началу этого ответа).

  • Еще в find_branch у вас есть проблема с областью действия определенных вами переменных (см. Начало моего ответа). У вас должно быть что-то вроде:

    my ($X_branch, $Y_branch, $Z_branch);
    if (abs($Z1-$Z2) < $rXY) {
        $Z_branch=($Z1+$Z2-$rXY)/2;
        my $a=($Z1-$Z_branch)/$rXY;
        $X_branch=(1-$a)*$X1+$a*$X2;
        $Y_branch=(1-$a)*$Y1+$a*$Y2;
    }
    elsif ($Z1 < $Z2) {
        $X_branch=$X1;
        $Y_branch=$Y1;
        $Z_branch=$Z1;
    }
    else {
        $X_branch=$X2;
        $Y_branch=$Y2;
        $Z_branch=$Z2;
    }
    return ($X_branch,$Y_branch,$Z_branch);
    

    Эти два исправления должны заглушать каждое предупреждение. Тем не менее, я подозреваю, что в вашем коде есть и другие проблемы.

  • В find_min_dist вы должны писать не my $I = $i и my $J = $j, а, скорее, $I = $i и $J = $j (все еще та же проблема с областями видимости).

  • Ваш подчиненный branch ничего не делает: вы вычисляете некоторые $rho, $theta и $phi, но вы не возвращаете их (и вы также не изменяете аргументы) . [+1169]

  • В generate_pillars_shape, @X_values, @Y_values, @X, @Y все они должны быть локально объявлены с my. Кроме того, вы можете инициализировать @X_values с помощью @X_values = grep {

    Я не могу воспроизвести вашу ошибку. Однако в вашем коде много ошибок, поэтому позвольте мне их просмотреть, и, надеюсь, это поможет вам найти вашу реальную ошибку.

    Во-первых, переменные должны быть определены в наименьшей возможной области видимости: если переменная используется только внутри функции, она должна быть определена внутри этой функции. Если переменная используется только в цикле [116], она должна быть определена в этом цикле. В этом духе вы должны удалить

    [110]

    в начале вашего кода. Также имейте в виду, что [117] объявляет лексическую переменную, видимую только в текущей области (то есть , т.е. вы можете использовать ее только в текущем блоке). Например,

    [111]

    объявляет 3 переменные, которые не существуют после блока [118].

    Во-вторых, [119] объявляет новую переменную и поэтому должна использоваться только один раз для каждой переменной. Если вы напишите

    [112]

    В первой строке будет объявлена ​​переменная [1110] и задано значение [1111]. Вторая строка объявляет новую переменную [1112] (таким образом, затеняя старую) со значением [1113] и возвращает ее. Вместо этого вы хотите написать:

    [113]

    Теперь позвольте мне пройтись по вашему коду, чтобы указать на несколько ошибок / улучшений:

    • [1114 ] должно быть [1115] (согласно началу этого ответа).

    • Еще в [1116] у вас есть проблема с областью действия определенных вами переменных (см. Начало моего ответа). У вас должно быть что-то вроде:

      [114]

      Эти два исправления должны заглушать каждое предупреждение. Тем не менее, я подозреваю, что в вашем коде есть и другие проблемы.

    • В [1117] вы должны писать не [1118] и [1119], а, скорее, [1120] и [1121] (все еще та же проблема с областями видимости).

    • Ваш подчиненный [1122] ничего не делает: вы вычисляете некоторые [1123], [1124] и [1125], но вы не возвращаете их (и вы также не изменяете аргументы) . [+1169]

    • В [1126], [1127], [1128], [1129], [1130] все они должны быть локально объявлены с [1131]. Кроме того, вы можете инициализировать [1132] с помощью [1133] (то же самое для @Y_values), что я считаю более читабельным, чем то, что вы написали.

    • Вы должны поместить свой код в функции или блоки кода ({ ... }), чтобы использовать правильную область видимости: хотя может иметь смысл иметь $min_X, $max_X, $min_Y, $max_Y и $distance как глобальные переменные, вы определенно не хотите, чтобы $min_radian или $b определялись везде в вашем файле.

    • Не используйте $a или $b (это специальные переменные, используемые sort; вы не хотите связываться с ними (см., Например, этот вопрос ) )). [1 172]

    • Кроме того, просто для ясности, в вашем подпункте find_branch вы можете быть немного более компактными, чтобы получить аргументы:

        my ($X1, $Y1, $Z1, $X2, $Y2, $Z2) = @_;
      

    Я довольно убежден, что есть другие проблемы с вашим кодом. Пожалуйста, расскажите нам, что вы пытаетесь сделать и что должна делать каждая функция, если вам нужна дополнительная помощь.

    % $d == 0 }

    Я не могу воспроизвести вашу ошибку. Однако в вашем коде много ошибок, поэтому позвольте мне их просмотреть, и, надеюсь, это поможет вам найти вашу реальную ошибку.

    Во-первых, переменные должны быть определены в наименьшей возможной области видимости: если переменная используется только внутри функции, она должна быть определена внутри этой функции. Если переменная используется только в цикле [116], она должна быть определена в этом цикле. В этом духе вы должны удалить

    [110]

    в начале вашего кода. Также имейте в виду, что [117] объявляет лексическую переменную, видимую только в текущей области (то есть , т.е. вы можете использовать ее только в текущем блоке). Например,

    [111]

    объявляет 3 переменные, которые не существуют после блока [118].

    Во-вторых, [119] объявляет новую переменную и поэтому должна использоваться только один раз для каждой переменной. Если вы напишите

    [112]

    В первой строке будет объявлена ​​переменная [1110] и задано значение [1111]. Вторая строка объявляет новую переменную [1112] (таким образом, затеняя старую) со значением [1113] и возвращает ее. Вместо этого вы хотите написать:

    [113]

    Теперь позвольте мне пройтись по вашему коду, чтобы указать на несколько ошибок / улучшений:

    • [1114 ] должно быть [1115] (согласно началу этого ответа).

    • Еще в [1116] у вас есть проблема с областью действия определенных вами переменных (см. Начало моего ответа). У вас должно быть что-то вроде:

      [114]

      Эти два исправления должны заглушать каждое предупреждение. Тем не менее, я подозреваю, что в вашем коде есть и другие проблемы.

    • В [1117] вы должны писать не [1118] и [1119], а, скорее, [1120] и [1121] (все еще та же проблема с областями видимости).

    • Ваш подчиненный [1122] ничего не делает: вы вычисляете некоторые [1123], [1124] и [1125], но вы не возвращаете их (и вы также не изменяете аргументы) . [+1169]

    • В [1126], [1127], [1128], [1129], [1130] все они должны быть локально объявлены с [1131]. Кроме того, вы можете инициализировать [1132] с помощью [1133] (то же самое для @Y_values), что я считаю более читабельным, чем то, что вы написали.

    • Вы должны поместить свой код в функции или блоки кода ({ ... }), чтобы использовать правильную область видимости: хотя может иметь смысл иметь $min_X, $max_X, $min_Y, $max_Y и $distance как глобальные переменные, вы определенно не хотите, чтобы $min_radian или $b определялись везде в вашем файле.

    • Не используйте $a или $b (это специальные переменные, используемые sort; вы не хотите связываться с ними (см., Например, этот вопрос ) )). [1 172]

    • Кроме того, просто для ясности, в вашем подпункте find_branch вы можете быть немного более компактными, чтобы получить аргументы:

      [115]

    Я довольно убежден, что есть другие проблемы с вашим кодом. Пожалуйста, расскажите нам, что вы пытаетесь сделать и что должна делать каждая функция, если вам нужна дополнительная помощь.

    [0] ..

    Я не могу воспроизвести вашу ошибку. Однако в вашем коде много ошибок, поэтому позвольте мне их просмотреть, и, надеюсь, это поможет вам найти вашу реальную ошибку.

    Во-первых, переменные должны быть определены в наименьшей возможной области видимости: если переменная используется только внутри функции, она должна быть определена внутри этой функции. Если переменная используется только в цикле [116], она должна быть определена в этом цикле. В этом духе вы должны удалить

    [110]

    в начале вашего кода. Также имейте в виду, что [117] объявляет лексическую переменную, видимую только в текущей области (то есть , т.е. вы можете использовать ее только в текущем блоке). Например,

    [111]

    объявляет 3 переменные, которые не существуют после блока [118].

    Во-вторых, [119] объявляет новую переменную и поэтому должна использоваться только один раз для каждой переменной. Если вы напишите

    [112]

    В первой строке будет объявлена ​​переменная [1110] и задано значение [1111]. Вторая строка объявляет новую переменную [1112] (таким образом, затеняя старую) со значением [1113] и возвращает ее. Вместо этого вы хотите написать:

    [113]

    Теперь позвольте мне пройтись по вашему коду, чтобы указать на несколько ошибок / улучшений:

    • [1114 ] должно быть [1115] (согласно началу этого ответа).

    • Еще в [1116] у вас есть проблема с областью действия определенных вами переменных (см. Начало моего ответа). У вас должно быть что-то вроде:

      [114]

      Эти два исправления должны заглушать каждое предупреждение. Тем не менее, я подозреваю, что в вашем коде есть и другие проблемы.

    • В [1117] вы должны писать не [1118] и [1119], а, скорее, [1120] и [1121] (все еще та же проблема с областями видимости).

    • Ваш подчиненный [1122] ничего не делает: вы вычисляете некоторые [1123], [1124] и [1125], но вы не возвращаете их (и вы также не изменяете аргументы) . [+1169]

    • В [1126], [1127], [1128], [1129], [1130] все они должны быть локально объявлены с [1131]. Кроме того, вы можете инициализировать [1132] с помощью [1133] (то же самое для @Y_values), что я считаю более читабельным, чем то, что вы написали.

    • Вы должны поместить свой код в функции или блоки кода ({ ... }), чтобы использовать правильную область видимости: хотя может иметь смысл иметь $min_X, $max_X, $min_Y, $max_Y и $distance как глобальные переменные, вы определенно не хотите, чтобы $min_radian или $b определялись везде в вашем файле.

    • Не используйте $a или $b (это специальные переменные, используемые sort; вы не хотите связываться с ними (см., Например, этот вопрос ) )). [1 172]

    • Кроме того, просто для ясности, в вашем подпункте find_branch вы можете быть немного более компактными, чтобы получить аргументы:

      [115]

    Я довольно убежден, что есть другие проблемы с вашим кодом. Пожалуйста, расскажите нам, что вы пытаетесь сделать и что должна делать каждая функция, если вам нужна дополнительная помощь.

    [1]
    (то же самое для @Y_values), что я считаю более читабельным, чем то, что вы написали.

  • Вы должны поместить свой код в функции или блоки кода ({ ... }), чтобы использовать правильную область видимости: хотя может иметь смысл иметь $min_X, $max_X, $min_Y, $max_Y и $distance как глобальные переменные, вы определенно не хотите, чтобы $min_radian или $b определялись везде в вашем файле.

  • Не используйте $a или $b (это специальные переменные, используемые sort; вы не хотите связываться с ними (см., Например, этот вопрос ) )). [1 172]

  • Кроме того, просто для ясности, в вашем подпункте find_branch вы можете быть немного более компактными, чтобы получить аргументы:

    [115]

Я довольно убежден, что есть другие проблемы с вашим кодом. Пожалуйста, расскажите нам, что вы пытаетесь сделать и что должна делать каждая функция, если вам нужна дополнительная помощь.

0
ответ дан Dada 19 March 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: