I이 제대로 작동하지 않는 다음 코드 ...[] 기능은 C++에서 제대로 작동하지 않는 삭제
코드 :
#include <iostream>
#include <new>
#define nullptr NULL
using namespace std;
int main()
{
int i,n;
int * p;
cout << "How many numbers would you like to type? ";
cin >> i;
p= new (nothrow) int[i];
if (p == nullptr)
cout << "Error: memory could not be allocated";
else
{
for (n=0; n<i; n++)
{
cout << "Enter number: ";
cin >> p[n];
}
cout << "You have entered: ";
for (n=0; n<i; n++)
cout << p[n] << ", ";
delete[] p;
for (n=0; n<i; n++)
cout <<"a "<< p[n] << endl;
}
return 0;
}
delete[] p;
문을 사용하면 내가 값을 인쇄 p
이전에 할당 된 메모리가 해제 되었기 때문에 모든 요소가 가비지 값을 생성해야하지만 첫 번째 2 개 요소에 대해서만 가비지 값을 생성하고 나머지 요소는 할당 된 값을 인쇄합니다. 즉 할당 된 총 메모리는 다음과 같습니다. 해제되지 않았습니다 ...
- 왜 그런가?
- 어떻게이 문제를 해결할 수 있습니까?
정의되지 않은 동작은 ** 정의되지 않음 **입니다. 메모리를 해제했다고해서 그것이 쓰레기로 덮어 써야한다는 것을 의미하지는 않습니다. 사실, 당신은 자신이 소유하지 않은 메모리를 읽으려는 segfault를 얻지 못하기 때문에, 당신이 뭔가 다른 것을 요구할 경우를 대비하여 라이브러리는 메모리를 갖고있을 가능성이 높습니다. 더 중요한 것은'nullptr'을'NULL'로 정의하는 이유는 무엇입니까? – IllusiveBrian
알렉스 200 달러에 대해 정의되지 않은 동작을 취할 것입니다. – user657267
@KhairulBasar 개념은 범위를 벗어난 지역 변수와 유사합니다. 다음을 읽는 것이 도움이 될 수 있습니다. http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed - 외부 -의 - 범위 –