<C언어> 배열과 포인터를 이용하여 여러개의 함수안에 작성하던 중.

interweb8의 이미지

배열과 포인터를 이용하여 여러개의 함수안에 작성하던 중.

컴파일시 에러는 발생하지 않지만 메모리를 잘못 참조했는지 자꾸 exe실행오류가 뜹니다.

일일이 찍어봤더니 어느 한 부분이 잡히는데요.. ㅠ.ㅜ

아래처럼 작성했더만 에러는 나지 않지만 계속 exe실행 오류가 납니다.

int main()
{
char a[1000]={0,};

pre(a);

}

void pre_req(*a)
{
char b[2000]={0,};
while(1)
{
배열 a에 대한 여러가지 연산 종료후
break;
}

pre_rsp(b);
}

void pre_rsp(*b)
{
char c[2000]={0,}; <----이부분 추가하면 실행오류가 발생합니다.
while(1)
{
배열 b에 대한 여러가지 연산 종료후
break;
}

}

Tip좀 알려주세요 ㅠ.ㅜ
전체 풀 소스는 사정상 올려드릴수가 없답니다.
혹 실행 오류 발생시 대처법이나 서적 추천해 주신다면 바로 달려가 보도록 하겠습니다.
감사합니다.
초보이하 프로그래머...

ifree의 이미지

혹시 함수 내에서 선언한 배열을 함수 외부에서 참조하지는 않나요?

interweb8의 이미지

노가다 printf 이용해서 찾아냈어요 -0- 기쁘네요...

휴...

초보이하 프로그래머에게 권하는 학습법좀 추천해주세요 하핫 -0-

라스코니의 이미지

실행 파일 사이즈를 증가시킵니다. 더구나 이것을 함수 내에서 수행한다는 것은 흔한 방법은 아닙니다.

추천할만한 좋은 방법은 memset 을 이용하는 것입니다.

interweb8의 이미지

감사합니다. ^^

prix01의 이미지

결과는 컴파일러 마다 다르더군요.

cygwin에서 gcc로 어셈코드를 뽑아보았을 때는
char a[1000] = {0,};
이렇게 하는게 조금 더 코드 사이즈가 크게 나왔지만

ADS 1.2를 이용하여 어셈코드를 뽑았을 때는
완전히 동일한 어셈 코드가 나왔습니다.

VC로는 테스트를 못해봐서 어떻게 나올지 모르지만
컴파일러 마다 다르다...가 정답일 듯 합니다.

pajaebeo의 이미지

함수 내의 지역 변수인데 다르게 나오기도 하나요?
armcc 이든 gcc이든 둘 다 stack을 사용할 것 같은데 아닌가요?

라스코니의 이미지

{0,} 로 초기화하는 것은 지역변수에서 초기화하는 것입니다.

전역변수는 0 으로 초기화되도록 되어 있기 때문입니다.

{0,} 으로 초기화하면 컴파일러는 필요한 0 의 갯수만큼 0 값을 데이터 세그먼트 등에 보관하여야 하므로 파일 사이즈가 커지는 것입니다.

............................

지역변수로 char c[2000] 와 같은 약간(?) 큰 사이즈의 배열 선언은 스택 사이즈에 따라서 오류를 가져올 수도 있습니다. 이런 경우는 malloc 또는 calloc 을 쓰는 것도 좋은 방법입니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.