2015-02-21 4 views
0

Итак, сразу после выполнения этой функции свопинга все значения в моем массиве идут до -858993460. Почему это число? Я думаю, что так я объявляю свой массив, но не является указателем, объявляя его таким образом? Я пытаюсь понять, почему это так. ну вот код:Перемещение по значениям ссылочного массива

int* arrayCreate()//added mg 
{ 
    int a[] = { 3, 7, 4, 9, 5, 2 }; 

    return a; 
} 

void Sort::Insert() 
{ 
    int t = 0; 

    //start clock 
    clock_t start = clock(); 
    d = arrayCreate(); 
    size = 6; 
    for (int i = 1; i< size; i++) 
    { 
     t = i; 

     while (((t - 1) >= 0) && (d[t] < d[t- 1])) 
     { 
      //Swap 
      Swap(d[t], d[t- 1]); // right after this call 
            //the debugger says values go to - 8e^8 
      t--; 
     } 
    } 
} 

void Sort::Swap(int& n1, int& n2) 
{ 
    int temp = n1; 
    n1 = n2; 
    n2 = temp; 
} 
+0

Выполнение некоторых тестов Я понимаю, если да: \t int * a = new int [6]; \t a [0] = 3; a [1] = 7; a [2] = 4; a [3] = 9; a [4] = 5; \t a [5] = 2; Это не испортит массив после свопинга. Но почему? Мне так любопытно, что я действительно должен знать. – zissler

ответ

2

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

поэтому, как только вы вернете A, он указывает на не определенную память.

int* arrayCreate()//added mg 
{ 
    int a[] = { 3, 7, 4, 9, 5, 2 }; 

    return a; 
} 

Может быть изменен на этой

int* arrayCreate()//added mg 
{ 
    static int a[] = { 3, 7, 4, 9, 5, 2 }; 

    return a; 
} 

Маркировка массив как статические заставит память прилипать вокруг.

+0

Это имеет большой смысл, но значения прилипают до обмена в отладчике. Почему это? – zissler

+1

Undefined не определен. Если вы скомпилируете свой код с помощью другого компилятора, вы, скорее всего, получите разные результаты. Пожалуйста, знайте, что когда я говорю undefined, я говорю не о самой памяти, а о том, что говорит этот язык. Это реализация и компиляция зависит, и результаты будут очень. В CPP это обычно называют неопределенным поведением. – Freddy

+0

Я предполагаю, что визуальные студии отбрасывали меня. Я пойду с тем, что вы сказали. Также есть ли более простой способ объявить предопределенный указатель массива без использования статического? – zissler

Смежные вопросы