2014-09-04 9 views
0

배열이나 벡터 만 사용할 수 있다는 점에 유의하십시오.배열의 동적 배열 안에 값을 넣고 C++로 값을 삭제하는 방법

어쨌든 나는 지금까지 이런 일이 :

int** arrays = new int*[10]; 
arrays[0] = new int[99]; 
arrays[1] = new int[47]; 

내가 완전히 확실하지 않다을하지만 난 당신이하는 것과 같은 방법으로 지적지고 배열 내에서 값을 넣을 수있을 거라고 생각 2D 배열.

그럼이 작품과 같은 것이 있습니까?

arrays[1][30] = 5; 

또한 나는 그것을 할 수있을 것입니다 배열 (안 배열 포인터) 중 하나를 삭제하기를 원한다면 :

C에서
delete[] arrays; 
+1

을 삭제하려면? – hobbs

+0

[this] (http://stackoverflow.com/a/936702/1141471) 도움이 될 수 있습니다 – 4pie0

+0

'std :: vector > 배열 (10);을 사용하면 훨씬 편하게 생활 할 수 있습니다. 배열 [0] .resize (99); 배열 [1] .resize (47); 등. –

답변

1

++ 새로운 호출 할 때마다 삭제할 ​​일치하는 전화를해야한다. 그래서 당신은 배열을

int **arrays = new int*[10]; 
arrays[0] = new int[99]; 
arrays[1] = new int[47]; 

을 초기화 할 때 당신은 일반적인 경우에

delete [] arrays[0]; 
delete [] arrays[1]; 
delete [] arrays; 

함께 삭제 this 응답 및 전체 스레드를 읽었습니다. 메모리가 이미 할당되어 있기 때문에

호출

arrays[1][30] = 5; 

하는 것은 괜찮습니다.

0

순서 : 예 (위험 부담 있음), 그렇지 않을 수 없습니다.

첫 번째로 배열에서 몇 개의 요소가 있으므로 끝에서 벗어나지 않도록 기억해야합니다 (항상).

typedef struct { 
    int len; 
    int* contents; 
} FiniteArray; 

다음 int** arrays 실제로 FiniteArray 구조 자체가 FiniteArray*의 배열 만들기 : 한 각 방법은 구조를 사용할 수 있습니다.

배열을 사용하여 100 % 설정 한 경우에도 계속 길이를 유지할 수 있습니다. 물론 잊지 마세요 : arrays에도 요소 수가 필요합니다!

두 번째 부분이 delete[] 인 경우 배열 배열 이 삭제되지만 나머지 메모리는 할당 된 상태로 유지됩니다!

배열에 new을 사용하면 delete[]을 사용하는 것이 옳습니다. 그렇지 않으면 객체의 경우 delete 등을 사용하십시오. this question을 참조하십시오. 예, 복제본이라는 것을 알고 있지만 복제본이라고 표시된 것보다 더 잘 설명한다고 생각했습니다.

arrays을 삭제하려면 먼저 개별 배열의 할당을 해제해야합니다.귀하의 경우,

delete[] arrays[0]; 
delete[] arrays[1]; 
delete[] arrays; 
arrays = NULL; // always a good idea! 

그냥 하나 개의 배열, 말, 첫 번째, 당신은 그것을 시도했을 때 어떤 현상이 발생

delete[] arrays[0]; 
arrays[0] = NULL; // always a good idea!