Почему моя программа показывает ошибку сегментации в Ubuntu, но работает нормально в Geeks IDE?

Пул String (ака interning ) и Целочисленный пул размывает разницу и может позволить вам использовать == для объектов в некоторых случаях вместо .equals

Это может дать вам большую производительность (?) за счет большей сложности.

Например:

assert "ab" == "a" + "b";

Integer i = 1;
Integer j = i;
assert i == j;

Компромисс сложности: вас может удивить следующее:

assert new String("a") != new String("a");

Integer i = 128;
Integer j = 128;
assert i != j;

Я советую вам держаться подальше от такой микро-оптимизации, а всегда использовать .equals для объектов, а == для примитивов:

assert (new String("a")).equals(new String("a"));

Integer i = 128;
Integer j = 128;
assert i.equals(j);

1
задан Ctx 15 January 2019 в 17:40
поделиться

1 ответ

Здесь:

int priority[n],min=at_copy[0],k,j;
for(j=0;j<n;j++){
    min=at_copy[0];
    for(i=0;i<n;i++){
        if(at_copy[i]<min){
            min=at_copy[i];
            k=i;
        }
    }
    at_copy[k]=999;
    ...

Представьте, что происходит, когда at_copy[0] является минимальным значением. Тогда условие atcopy[i]<min никогда не выполняется, и k остается неинициализированным, что приводит к выходу за пределы этой области:

    at_copy[k]=999;

Вы должны инициализировать k с помощью 0, так как вы предполагаете в первом итерации, что at_copy[0] является минимумом.

int priority[n],min=at_copy[0],k=0,j;

С Geeks-IDE вы, возможно, были «везунчиками», и k имел значение 0 без инициализации.

0
ответ дан Ctx 15 January 2019 в 17:40
поделиться
Другие вопросы по тегам:

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