2017-03-29 2 views
0

동적으로 할당 된 요소를 인쇄하려고합니다.void 인쇄 기능에서 오류가 발생했습니다.

여기가 내 문제이기 때문에 학습에 익숙하지 않고 왜 이것이 작동하지 않는지 이해하지 못했습니까? 왜 이것이 오류를 일으키는 지 간략한 설명을 주시면, 저는 실수로 배우려고하고 있습니다. 나는 동적으로 사용자 입력을 메인 함수에 할당 할 수 있다는 것을 알았지 만, 동적으로 함수를 생성 한 후 사용자 함수를 생성하는 입력 함수를 만들면 시행 착오를보고 싶었다. 할당 된.

이 작품을 만들기 위해 내가 할 수있는 것에 대한 제안은 정말 대단합니다.

void print(int* input, int size) 
{ 
    uinput(input,size); 
    for(int i=0; i<size;i++) 
    { 
     std::cout << " " << input[i];// Error -> Thread 1:EXC_BAD_ACCESS (code=1,address=0x0) 
    } 
} 

#include <iostream> 
void print(int*, int); 
void uinput(int*, int); 
int* copy(const int*, int); 
int main() 
{ 
    int size; 
    int* input; 
    std::cout << "Enter the size of the array"; 
    std::cin >> size; 


    std::cout << "Original array:" << std::endl; 


    print(input,size); 
    int* expander = copy(input,size); 

    std::cout << "New array:" << std::endl; 

    print(expander,size); 

    delete [] input; 
    delete [] expander; 
    input= nullptr; 
    expander = nullptr; 
    return 0; 
} 
void uinput(int* input, int size) 
{ 
    int* uInput = new int[size]; 
    for(int k=0; k <size;k++) 
    { 
     std::cin >> uInput[k]; 
    } 
} 
int* copy(const int* input, int size) 
{ 
    int* newArray = new int[size*2]; 
    int j =0; 
    for(int i = 0; i <size*2;i++) 
    { 
     if(j >i) 
     { 
      newArray[j]=newArray[i]; 
      j++; 
     } 
     else 
      newArray[j]=0; 
    } 

    return newArray; 
} 

업데이트 위의 인쇄 기능이없는 전체 코드 : 나는 그냥 uInput 기능의 크기를 가리 할 경우 수정을 시도했지만 문제가 해결되지 않았다.

void uinput(int size) 
{ 
    int* uInput = new int[size]; 
    for(int k=0; k <size;k++) 
    { 
     std::cin >> uInput[k]; 
    } 
} 
+2

uinput() 내의'input'은 포인터의 사본입니다. 동적 배열에'std :: vector'를 사용하는 것이 더 낫습니다. –

+0

std :: vectors가 어떻게 작동하는지 잘 모르겠습니다 만, 아직 벡터를 배우지 못했습니다. 내가 이것을 고칠 수있는 방법을 찾은 후에 벡터로 사용하려고 시도했을지도 모른다. – Pierre

+1

그게 핵심입니다 : 당신은'new' /'new []'를 사용하지 마십시오. 항상 스마트 포인터와'std :: vector'. 여기서는 꽤 간단합니다 :'std :: vector input (size);'그런 다음 참조로 전달하십시오. –

답변

2

귀하의 uinput 기능은 메모리를 할당하지만, 당신이 그것을 보내 input 매개 변수를 사용하지 않습니다. 결과적으로 포인터를 가리키는 것으로 추정되는 항목을 반복하려고 시도하면 아무 것도 가리 키도록 초기화되지 않았으므로 정의되지 않은 동작으로 인해 프로그램이 중단됩니다.

+1

입력 매개 변수를 사용해도 'int *'가 값으로 전달되기 때문에 작동하지 않습니다. – drescherjm

+0

@ Elkvis, 크기 매개 변수를 가리키는 입력 매개 변수가 있다고 생각 했습니까? 그렇게하면 사용자가 동적으로 할당하려고하는 배열의 크기를 전달할 수 있습니다. 배열 요소를 입력합니다. 나는 틀렸다는 것을 알고 있지만, 나는 이것을 쓰면서 생각하는 과정이었다. – Pierre

+0

'uinput()'에서는 저장 공간을 할당하지만 함수가 반환 되 자마자 해당 저장 공간이 손실됩니다. 값을 읽은 후에는 아무 것도하지 않습니다. 하나의 옵션은'uinput()'이 포인터를 반환하는 것일 수 있습니다.이 경우'print()'는 매개 변수로 받아 들일 필요가 없습니다. – Elkvis

관련 문제