2016-10-31 8 views
-2

私は再びポインタを覚えようとしましたが、数値を入力するとエラーが表示されました。私は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.S.私はC++に新たなんだ:私はp_arraypointerに格納されたアドレスを割り当てられ、その後delete[] p_array;前に名前pointerp_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; 
} 

:P

+3

問題は 'delete [] p_array;'にあります。バグの理由は 'p_array'はループ内でインクリメントしたためにnewを使って割り当てられたアドレスを指していないということです。 – drescherjm

+0

@drescherjmありがとう!あなたのヒントを使って修正しました。 – fantoro

答えて

1

は、私はこれを行うことによってそれを修正しました。

問題の原因を教えてくれたdrescherjmに感謝します。

誰もこの説明を必要としないだろうと思っていますが、ここに書き込むと思いました。

+2

私は追加するのを忘れました、誰でも私の質問に間違っていることを教えてもらえますか?私はそれが3 downvotesを受け取り、私は何が間違っているのか分からないので、私は尋ねています。 – fantoro

関連する問題