私はpersonというクラスを持っていますが、コンストラクタの "new"キーワードで動的に割り当てられるintの配列を指しています。しかし、私は、メンバ関数、 "人:: getval"からポインタを介してこの配列にアクセスしようとすると、私は間違って何をしている上で読み取りアクセス違反を受け取りましたか?スコープとは何か関係があるかもしれないと思います。なぜなら、コンストラクタ内部から "numlist"配列にアクセスすると問題はないからです。ありがとう。メンバー関数を使用して動的に割り当てられたメンバー変数にアクセスしようとするとアクセス違反が発生する
person.h
class person {
public:
person();
person(int length);
~person();
int getval(int a);
void setval(int a, int b);
private:
int* numlist;
int listlength;
int age;
};
#include "stdafx.h"
#include "person.h"
person::person() {
person(4);
}
person::person(int length){
age = 16;
numlist = new int[length];
listlength = length;
for (int k = 0; k < length; k++) {
numlist[k] = 0;
}
}
person::~person() {
delete[] numlist;
}
int person::getval(int a) {
return *(numlist + a); //READ ACCESS VIOLATION OCCURS HERE
}
void person::setval(int position, int val) {
*(numlist + position) = val;
}
メインperson.cpp
#include "stdafx.h"
#include "person.h"
#include <iostream>
using namespace std;
int main()
{
person mark;
cout << mark.getval(1)<<endl;
int x; //hold output
cin >> x;
return 0;
}
あなたが呼び出していない、一時的な人物を作成し、それを何もしていません
これは 'person(4);'あなたがしていると思わないことです – Drop