2016-10-31 4 views
-2

그래서 포인터를 다시 배우려고 시도했는데 숫자를 입력하면 Visual Studio에서 오류가 발생했습니다. 내가 p_array++;에 문제가 있음을 알고p_array ++ 다음에 "Project.exe가 중단 점을 트리거했습니다."; in Visual Studio 2015

// Includes 
#include "stdafx.h" 
#include <iostream> 
#include <conio.h> 

using namespace std; 

// Variables 
int amount; 

// Main function 
int main() 
{ 
    cout << "How many numbers should be in this array: "; 
    cin >> amount; 
    int *p_array; 
    p_array = new int[amount]; 
    for (int i = 0; i < amount; i++) 
    { 
     cout << (int)p_array << endl; 
     p_array++; 
    } 
    delete[] p_array; 
    _getch(); 
    return 0; 
} 

: 다음은 소스입니다.

또한 Code : Blocks에서이 코드를 컴파일하려고 시도했을 때 완벽하게 작동했습니다 (코드 블록에서 컴파일 할 때 을 으로 변경 함).

P. 나는 ++ C에 새로운 해요 : P

+3

문제는'delete [] p_array;'버그가있는 이유는'p_array'가 더 이상 루프를 통해 증가했기 때문에 new를 사용하여 할당 된 주소를 가리 키지 않기 때문입니다. – drescherjm

+0

@drescherjm 고마워요! 팁을 사용하여 수정했습니다. – fantoro

답변

1

내가이 일을하여 고정 : 나는 이름 pointer으로 포인터를 만든 다음 delete[] p_array; 전에 내가 주소가 p_arraypointer에 저장이 할당 p_array의 원래 주소 저장

// Includes 
#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <conio.h> 

using namespace std; 

// Variables 
int amount; 
int *pointer; 

// Main function 
int main() 
{ 
    cout << "How many numbers should be in this array: "; 
    cin >> amount; 
    int *p_array; 
    p_array = new int[amount]; 
    pointer = p_array; 
    for (int i = 0; i < amount; i++) 
    { 
     cout << (int)p_array << endl; 
     p_array++; 
    } 
    p_array = pointer; 
    delete[] p_array; 
    _getch(); 
    return 0; 
} 

.

문제점에 대해 알려 주신 drescherjm에게 감사드립니다.

아무도이 설명이 필요하지 않겠지 만 여기에 적어 둘 생각입니다.

+2

추가하는 것을 잊어 버렸습니다. 누구든지 내 질문에 무엇이 잘못되었는지 말해 줄 수 있습니까? 나는 그것이 3 개의 downvotes를 받았기 때문에 나는 무엇이 잘못되었는지를 묻고있다. – fantoro

관련 문제