C++에서 new로 변수를 생성한뒤 delete하는것을 깜빡한다면?

noblepylon의 이미지

예로 들어서
 

 

 

void f()
{
   string* str = new string; // str이라는 문자열을 생성한다.
 
   *str = "Respect my authorita!"; // str에 대입
} // delete하는것을 잊었음.

함수 f가 종료되면 포인터 str은 사라집니다.
문제가 되는 것은 str이 가리키고 있던 문자열인데,
문자열 내용이 영원히 메모리에 둥둥떠다니게 될까요?
그렇다면 정말 끔찍한데...
serialx의 이미지

네..전형적인 메모리 릭이죠..

그래서 복잡한 경우에는 (delete 하기 힘든경우) 스마트 포인터를 쓰거나 합니다.

mg2000의 이미지

string을 함수 내부에서만 사용하신다면, 굳이 new를 이용해서 생성하실 필요는 없을 것 같은데요.
(string이 너무 길어서 stack이 부족하지 않는한...)

void f()
{
   string str = "Respect my authorita!";
}

요런식으로 바꿔보시면 어떨런지요?

noblepylon의 이미지

저는 단지 new로 생성한 변수를 지우지 않으면 영원히 남아있는가 궁금해서요.
사실 위의 경우는 new를 사용할 필요가 없습니다.
---
"The truth will make you free."(John 8:32)
"I am the way, and the truth, and the life: no one comes to the Father but through Me."(John 14:6)

---
“내게 능력주시는 자 안에서 내가 모든 것을 할 수 있느니라.”(빌립보서 4:13)

mg2000의 이미지

해당 프로세스가 종료하면, OS가 해제해 주긴 하지만,

프로세스가 살아있는 동안은 살아서 개발자를 괴롭히죠.. ㅠ.ㅠ

다 사용하셨다면, 반드시 delete를 해 주셔야 합니다.

kiwist의 이미지

저도 이 문제 때문에 요즘 골치인데, new로 할당하고 사용 후 함수 종료하기 전에 delete를 해버리면 Segmentation Fault가 납니다. -_-;;;
delete 하지 않으면 문제가 생길지 안생길지는 모르지만 일단 동작은 하고요.

그래서 그냥 스택 변수로 만들었는데, 역시 Segmentation Fault... -_-;;;
특이하게 이상한 클래스도 아닌데, 이런 문제가 계속 생기네요.

cppig1995의 이미지

클래스 내부의 어떤 메소드에서 delete this를 하는 게 아닐까요? (추측추측)
--
임수서룬뫼 윤희수 {cppig1995/돼지군}

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

mg2000의 이미지

제가 겪었던 비슷한 문제는 할당을 했는데, 실제 데이터를 쓸때, 할당된 크기 보다 더 큰 데이터를 썼을때,

delete가 제대로 안됬었습니다. (에러 발생).

new로 할당하셨다면, 데이터를 넣지 않고 바로 delete를 했을때, 제대로 해제가 되는지 테스트 해 보심이 어떨런지요?

pizza1977의 이미지

에러도 내주고... 잘 돌아가는 순간 악몽의 시작입니다.

포탈이는 불사신

-------------
포탈이는 불사신

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.