나 혼자서 cpp를 배우고있다. (나는 이미 너를 놀라게하지 않았기를 바란다.) 나는 포인터 나 참조가 무엇인지 이해하고 있으며 포인터에 대한 참조를 얻는다 고 생각한다. 입니다.포인터 참조를 삭제하면 프로그램이 충돌 함
void read_file(std::ifstream & file, zuzel *& ranking)
{
if(!open(file))
return; //exit function if reading a file failed
int size = 1;
while(!file.eof())
{
zuzel * update = new zuzel[size];
if(ranking != NULL) memcpy(update, ranking, (size-1)*sizeof(*ranking)); //copy existing contents
file >> update[size - 1].nazwa >> update[size - 1].zawodnicy >> update[size - 1].mecze >> update[size - 1].punkty;// add a new team
delete[] ranking; //delete old data
std::cout << "tst"; //just to see if it crashes
ranking = update;
size++;
}
}
int main()
{
zuzel * rank;
std::ifstream file;
read_file(file, rank);
return 0;
}
:
open(file)
zuzel
구조로가는 문자열과 3 개 정수 각 라인이 포함 된 TXT 파일을 열 수있는 간단한 기능입니다 : 내가
delete[] ranking;
에서 충돌 코드를 작성했습니다
나는 당신이 새하지 않았다 무언가를 삭제하지 않도록 발견하지만, 예를 들어 그 코드는 충돌하지 않습니다
void funk(int *& a)
{
delete[] a;
}
int main()
{
int a[3] = {3, 4, 6};
int * p = a;
funk(p);
return 0;
}
어떻게 그 충돌을 해결할 수 있습니까? 나는 그것이 왜 그렇게 행동하는지 몇 가지 간단한 설명을 많이해야 할 것입니다.
"크래시가 발생하지 않음"이 코드가 유효 함을 의미하지 않습니다. – Mat
'나는 당신이 새로운 것을 만들지 말아야한다는 것을 알았지 만, 예를 들어 그 코드는 크래쉬가 안된다. '이런 나쁜 C++ 코드가 충돌한다는 보장은 없다. – PaulMcKenzie
'나는 혼자서 cpp를 배우고있다. '그런 다음 동적 배열을 시뮬레이트하기 위해 하위 수준 C를 작성하는 대신'std :: vector'를 사용하는 방법을 배우도록 제안 할 수 있습니다. – PaulMcKenzie