다음 코드는 간단한 해시 함수를 구현합니다. new
연산자를 사용하여 구조체 인스턴스를 할당했습니다.메모리 누수를 피하려면 delete를 사용해야합니까? new를 사용하여 구조체 인스턴스를 할당했습니다.
프로그램 종료시 delete
연산자를 사용합니까?
그렇다면 어떻게해야합니까? [delete
구조체의 각 인스턴스에 대한 설명? 아니면 더 쉬운 방법이 있습니까? ]
#include <iostream>
#define SIZE 10
using namespace std;
typedef struct myhashtag
{
int data;
struct myhashtag * next;
} myhash;
void printhash(myhash array[])
{
// print fn
}
void hash(int data, myhash array[])
{
int h = data % SIZE;
myhash * newhash = new myhash;
newhash->data = data;
newhash->next = NULL;
if(array[h].next == NULL) //first insert
{
array[h].next = newhash;
return;
}
myhash * iter = array[h].next;
while(iter->next != NULL)
{
iter = iter->next;
}
iter->next = newhash;
return;
}
int main()
{
myhash array[SIZE];int i;
for(i=0; i<SIZE; i++)
{
array[i].data = 0;
array[i].next = NULL;
}
while(1)
{
cout << "\nSo, what would you like to enter? : ";
cin >> i;
hash(i, array);
printhash(array);
}
// the deletes go here
return 0;
}
모든'new()'에는'delete' 문이 있어야합니다. 구조체의 각 인스턴스에 대해'delete' 문을 사용합니까? 예, myhash array [SIZE];로 자동 생성 된 것 외에도. –
큰 프로젝트를 처리 할 때마다 모든 new 연산자에 대해 delete를 사용해야합니다! 그렇지 않으면 기억력이 떨어질 것입니다! – Sathish
하지만 정말로''std :: shared_ptr' (http://en.cppreference.com/w/cpp/memory/shared_ptr)와 같은 메모리 관리 장치를 사용하여'new'와'delete'가 ' 필요하다. – 0x499602D2