C ++ 동적 어레이, 용량 증가

user3700502

동적 배열을 구현하려고하는데 여기에 용량을 늘리는 기능이 있습니다.

int* changeCapacity(int *arr, int length, int newCapacity) {
    int *newArr = new int[newCapacity];

    if(length > newCapacity){
        return 0;
    } else {
        for(int i = 0; i < length; i++){
            newArr[i] = arr[i];
        }
        delete[] arr;
        arr = newArr;
        return arr;
    }
}

이것은 내가 얻는 오류입니다.

speicher (2465,0x7fff7cfc2310) malloc : * 0x7f9742403910 개체에 대한 오류 : 해제되는 포인터가 할당되지 않았습니다. * 디버그를 위해 malloc_error_break에 중단 점을 설정합니다.

나는 그것을 다음과 같이 부른다.

int* addElement(int *arr, int& length, int& capacity, int val){
if(length >= capacity){
    capacity = capacity * 2;
    changeCapacity(arr, length, capacity);

    arr[length] = val;
    length += 1;
    return arr;
}else{

    arr[length] = val;
    length += 1;
    return arr;
}

}

4aRk Kn1gh7

여기에 더 나은 방법이 있습니다. 배우고 자하는 모든 사람들을위한 코멘트에 모든 것이 잘 설명되어 있습니다.

        #include <iostream>
        using namespace std;

        int* changeCapacity(int *arr, int length, int newCapacity);
        int* addElement(int *arr, int& length, int& capacity, int val);

        int main(){
            int length = 0; // no inital elements in array
            int capacity = 1; // initial capacity is one
            int* arr = new int[capacity]; // allocating space for values
            int* temp; // pointer for storing temporary values
            /* loop for adding elements to the array */
            for(int i=0;i<21;i++){
                temp = addElement(arr,length,capacity,i); // adding an element to the array
                if(temp == NULL) { // checks if execution was successful
                    cout<< "NULL returned...\n Exiting Now...";
                    return 0; // exits the program on failure
                }
                arr = temp; // changing the value of arr
            }
            /* loop for printing the array */
            for(int i=0;i<length;i++){
                cout<<arr[i]<<" ";          
            }
            return 0;
        }
        /* function for increasing the capacity of array */
        int* changeCapacity(int *arr, int length, int newCapacity) {
            int *newArr = new int[newCapacity]; // definging a new array

            if(length > newCapacity){ // checking if the length of the array is valid
                cout<< "invalid length of array\n";
                return NULL;
            } else {
                /* loop for transferring values to the new array */
                for(int i = 0; i < length; i++){
                    newArr[i] = arr[i];
                }
                delete[] arr; // deleting the old array (clears the memory of the old array)
                // arr = newArr; removed as this is not needed
                return newArr; // returns the new array
            }
        }

        /* function for adding a new element to the array */
        int* addElement(int *arr, int& length, int& capacity, int val){
        if(length >= capacity){ // checks if the array has space for storing the given value or not
            capacity = capacity * 2; // doubles the capacity of the array
            int* temp = changeCapacity(arr, length, capacity); // changes the size of the array to the new one
            if(temp == NULL){ // checking if a null was returned
                cout<< "Failed to change capacity\n";
                return NULL; // returning  NULL
            }
            arr = temp; // the value of arr was not changed in your code (problem corrected)
            arr[length] = val; // stores the value in the array
            length += 1; // increasing the number of element count of the array
            return arr; // returns the new array
        }else{
            arr[length] = val; // stores the value in the array
            length += 1; // increasing the number of element count of the array
            return arr; // returns the new array
        }
        }

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ArrayList와 HashMap의 용량 증가 차이

분류에서Dev

C ++ 동적 라이브러리에서 메모리 사용량 감지

분류에서Dev

동적 어레이의 용량을 두 배로 늘려야합니까?

분류에서Dev

R : geom_smooth + geom_hline으로 인해 메모리 사용량이 폭발적으로 증가합니다.

분류에서Dev

페이지로 이동하면 메모리 사용량이 증가합니다. Windows Universal 8.1

분류에서Dev

레일 적용 수량

분류에서Dev

OpenMP에서 재사용 가능한 개인 동적 할당 어레이

분류에서Dev

데이터 프레임의 각 행에 기능을 적용하고 동시에 카운터 증가

분류에서Dev

iOS 메모리 사용량이 계속 증가합니다.

분류에서Dev

이미지 전환시 CPU 사용량 증가

분류에서Dev

RAM 사용량이 계속 증가하고 있습니다.

분류에서Dev

대용량 데이터를위한 C # 비동기 Foreach 루프

분류에서Dev

C #에서 비동기 적으로 CPU 사용량 검색

분류에서Dev

JMeter : 사용자 부하가 증가했지만 동일한 처리량의 가능한 이유는 무엇일까요?

분류에서Dev

데이터가 이동 된 벡터의 용량

분류에서Dev

C ++ 동적 메모리에 대한 포인터에서 증가 연산자 사용

분류에서Dev

기본 키 자동 증가를 사용하여 SQL에 데이터 테이블 추가 C #

분류에서Dev

Cloud Shell 유휴 CPU 사용량이 상대적으로 높은 것 같습니다 (3 ~ 6 %).이 사용량의 출처는 어디인가요?

분류에서Dev

Laravel Cashier 수량 증가 업데이트가 작동하지 않습니다.

분류에서Dev

CPU 사용량이 100 %로 급증

분류에서Dev

제어 가시성을 기반으로 런타임시 동적 레이아웃 사용자 정의

분류에서Dev

For 루프 C #을 사용하여 단추 클릭시 레이블 증가

분류에서Dev

C #에서 자동 증가

분류에서Dev

mfc에서 대화 상자 창 크기를 조정하는 동안 메모리 리소스 사용량이 증가합니다.

분류에서Dev

Cloud Build는 어떻게 동적 매개 변수를 사용하여 레지스트리 태그를 증가시킬 수 있습니까?

분류에서Dev

이미지에 애니메이션을 적용 (즉, 동시에 증가 및 페이드 인)

분류에서Dev

단일 코어에서 듀얼 코어로 업그레이드-처리량이 두 배로 증가합니까?

분류에서Dev

그리드 어레이에 동적으로 데이터 추가

분류에서Dev

대용량 멀티미디어 서버에 가장 적합한 RAID

Related 관련 기사

  1. 1

    ArrayList와 HashMap의 용량 증가 차이

  2. 2

    C ++ 동적 라이브러리에서 메모리 사용량 감지

  3. 3

    동적 어레이의 용량을 두 배로 늘려야합니까?

  4. 4

    R : geom_smooth + geom_hline으로 인해 메모리 사용량이 폭발적으로 증가합니다.

  5. 5

    페이지로 이동하면 메모리 사용량이 증가합니다. Windows Universal 8.1

  6. 6

    레일 적용 수량

  7. 7

    OpenMP에서 재사용 가능한 개인 동적 할당 어레이

  8. 8

    데이터 프레임의 각 행에 기능을 적용하고 동시에 카운터 증가

  9. 9

    iOS 메모리 사용량이 계속 증가합니다.

  10. 10

    이미지 전환시 CPU 사용량 증가

  11. 11

    RAM 사용량이 계속 증가하고 있습니다.

  12. 12

    대용량 데이터를위한 C # 비동기 Foreach 루프

  13. 13

    C #에서 비동기 적으로 CPU 사용량 검색

  14. 14

    JMeter : 사용자 부하가 증가했지만 동일한 처리량의 가능한 이유는 무엇일까요?

  15. 15

    데이터가 이동 된 벡터의 용량

  16. 16

    C ++ 동적 메모리에 대한 포인터에서 증가 연산자 사용

  17. 17

    기본 키 자동 증가를 사용하여 SQL에 데이터 테이블 추가 C #

  18. 18

    Cloud Shell 유휴 CPU 사용량이 상대적으로 높은 것 같습니다 (3 ~ 6 %).이 사용량의 출처는 어디인가요?

  19. 19

    Laravel Cashier 수량 증가 업데이트가 작동하지 않습니다.

  20. 20

    CPU 사용량이 100 %로 급증

  21. 21

    제어 가시성을 기반으로 런타임시 동적 레이아웃 사용자 정의

  22. 22

    For 루프 C #을 사용하여 단추 클릭시 레이블 증가

  23. 23

    C #에서 자동 증가

  24. 24

    mfc에서 대화 상자 창 크기를 조정하는 동안 메모리 리소스 사용량이 증가합니다.

  25. 25

    Cloud Build는 어떻게 동적 매개 변수를 사용하여 레지스트리 태그를 증가시킬 수 있습니까?

  26. 26

    이미지에 애니메이션을 적용 (즉, 동시에 증가 및 페이드 인)

  27. 27

    단일 코어에서 듀얼 코어로 업그레이드-처리량이 두 배로 증가합니까?

  28. 28

    그리드 어레이에 동적으로 데이터 추가

  29. 29

    대용량 멀티미디어 서버에 가장 적합한 RAID

뜨겁다태그

보관