Почему произошла куча коррупции? - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть связанный список Unroll

class UnrolledLinkedList {
    Node* head;
    Node* tail;
    int size; //num of elements in List
    int numOfNodes;
    int nodeSize;
}

с таким узлом

class Node {
private:
    int maxElements;
public:
    int numElements; // number of elements in this node, up to maxElements
    int* elements; // an array of numElements elements,
    Node *next; // reference to the next node in the list
    Node *prev; // reference to the previous node in the list
}

И я хочу поместить элементы в массив. Это моя функция:

int* UnrolledLinkedList::toArray() {
int* arr = new int(size);
Node* pTemp = head;
int i = 0, j = 0, temp = 0;
while (pTemp) {
    i = 0;
    while (i < pTemp->numElements) {
        if (i != 0) j++;
        *(arr + j) = pTemp->elements[i];
        i++;
    }
    pTemp = pTemp->next;
    j++;
}
return arr;
}

И когда я это назвал

int* arr = list->toArray();
int n = list->getSize();
printf("The list after converted to array:\n");
            if (n > 0) {
                for (int i = 0; i < n; i++)
                    printf("%d ", arr[i]);
                printf("\n");
                delete[] arr;
            }
            else {
                printf("NULL\n");
            }

в основном, это обнаружило ошибку КОРРУПЦИЯ КАРТЫ ОБНАРУЖЕНА в строке delete[] arr; Пожалуйста, помогите мне! Заранее спасибо!

1 Ответ

0 голосов
/ 04 ноября 2018

Следующее утверждение не работает так, как вы думаете:

    int* arr = new int(size);

Создает один int, инициализированный значением size.

Ваш код наверняка будет лучше работать с:

    int* arr = new int[size];
...