정수 포인터 또는 배열의 기본 주소를 반환 할 때 분할 오류

지텐 드라 쿠슈 바하

로 프로그램을 작성하고 있는데 오류 메시지가 나타납니다.

Program terminated with signal SIGSEGV, Segmentation fault.

그 당시 시스템에서 사용하여 해당 프로그램을 실행 한 다음 반환 될 때까지 프로그램이 성공적으로 실행되었습니다.

[Warning] function returns address of local variable [enabled by default]

나는 무슨 일이 일어나고 있는지 이해할 수 없습니다.

내 프로그램은 다음과 같습니다.

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

int* getRecord(int s_size, int* s, int *result_size){
    int i = 0, heigh = s[0], low = s[0], heigh_count = 0, low_count = 0, a[2];
    for(i = 1; i < s_size; i++){
        if(s[i] > heigh){
            heigh_count++;
            heigh = s[i];
        }
        if(s[i] < low){
            low_count++;
            low = s[i];
        }
    }
    *result_size = 2;
    a[0] = heigh_count;
    a[1] = low_count;
    return a;
}

int main() {
    int n; 
    scanf("%d",&n);
    int *s = malloc(sizeof(int) * n);
    for(int s_i = 0; s_i < n; s_i++){
       scanf("%d",&s[s_i]);
    }
    int result_size;
    int* result = getRecord(n, s, &result_size);
    for(int i = 0; i < result_size; i++) {
        if (i) {
            printf(" ");
        }
        printf("%d", result[i]);
    }
    puts("");
    return 0;
}

입력

9

10 5 20 20 4 5 2 25 1

산출

2 4

오류 기록

GDB trace:
Reading symbols from solution...done.
[New LWP 17778]
Core was generated by `solution'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000000000040065d in printf (__fmt=0x4008a7 "%d")
    at /usr/include/x86_64-linux-gnu/bits/stdio2.h:104
104   return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
#0  0x000000000040065d in printf (__fmt=0x4008a7 "%d")
    at /usr/include/x86_64-linux-gnu/bits/stdio2.h:104
#1  main () at solution.c:41
마크 Ch

경고

함수는 지역 변수의 주소를 반환합니다.

거의 모든 것을 말합니다. 배열 aint*.

agetRecord()반환 시 파괴 되므로 result유효하지 않은 데이터에 대한 포인터를 보유하게되며 액세스를 시도 할 때 분할 오류가 발생합니다 result[i].

a를 사용하여 힙에 넣으면 malloc아마 괜찮을 것입니다. 그러나 여기에는 여전히 포인터와 배열의 이상한 혼합이 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

개체에 대한 포인터 배열의 크기를 조정하려고 할 때 "오류 : 할당시 호환되지 않는 유형"

분류에서Dev

분할 오류 : argv의 인수를 반복 할 때 11

분류에서Dev

new 연산자에서 반환하는 포인터를 배열 요소에 대한 포인터로 사용할 때 정의되지 않은 동작입니까?

분류에서Dev

함수에 포인터를 전달할 때 분할 오류

분류에서Dev

C 다음 포인터를 설정할 때 순환 연결된 목록의 세분화 오류

분류에서Dev

async / await를 사용할 때 기본값을 반환하는 오류 처리기

분류에서Dev

List <DerivedClass>의 요소를 반환 할 때 공분산 오류

분류에서Dev

함수에 대한 포인터를 반환하는 함수를 사용할 때 선언되지 않은 식별자 오류 (Visual Studio의 C ++)

분류에서Dev

repl.it Ruby 인터프리터 : 루프를 포함하는 여러 함수를 정의 할 때 오류

분류에서Dev

함수가있는 셀에 평균 또는 ""를 반환 할 때 #VALUE 오류

분류에서Dev

C : 구조체로 포인터를 초기화 할 때 분할 오류

분류에서Dev

C ++의 함수에서 문자열을 반환 할 때 분할 오류

분류에서Dev

음의 정수를 배열로 구문 분석 할 때 프로그램 오류

분류에서Dev

문자열 C 배열에 대한 포인터에 대한 strncpy를 수행하는 동안 분할 오류

분류에서Dev

다른 포인터 변수에 대한 포인터를 저장하려고 할 때 분할 오류

분류에서Dev

소인수 분해는 소수를 공급할 때 nil을 반환합니다.

분류에서Dev

float에 대한 포인터를 반환하면 주 함수에 도달 할 때 주소가 변경됩니다.

분류에서Dev

함수를 통해 구조체의 값을 변경하기 위해 포인터를 사용하려고하는데 함수에서 주소를 입력 할 때 오류가 발생합니다.

분류에서Dev

포인터를 따르려고 할 때 분할 오류 : C

분류에서Dev

분할 오류를 일으키는 c의 char 포인터

분류에서Dev

자체 정의 된 스토리 보드를 기본 인터페이스로 설정할 때 오류 발생

분류에서Dev

고정 크기 배열에 대한 포인터의 주소를 C의 포인터에 대한 포인터를 예상하는 함수에 전달할 수없는 이유는 무엇입니까?

분류에서Dev

오류 : insert_id를 반환하려고 할 때 사용중인 데이터베이스에서는이 기능을 사용할 수 없습니다.

분류에서Dev

std 문자열 인수가있는 템플릿 클래스는 로컬 배열을 저장소로 사용할 때 분할 오류를 제공합니다.

분류에서Dev

스트림 수집기의 결과를 반환 할 때 일치하지 않는 유형 오류를 수정하려면 어떻게해야합니까?

분류에서Dev

함수를 정의 할 때 포인터 또는 참조 변수에 이름이 지정되지 않음

분류에서Dev

반환형 포인터 함수에서 변수의 주소를 반환 할 수 있습니까?

분류에서Dev

오류를 수정하는 방법 클래스없이 반응 할 때 '정의되지 않음'또는 'null'의 속성 temperatureData를 구조화 할 수 없음

분류에서Dev

포인터에 배열의 주소를 할당 할 수없는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    개체에 대한 포인터 배열의 크기를 조정하려고 할 때 "오류 : 할당시 호환되지 않는 유형"

  2. 2

    분할 오류 : argv의 인수를 반복 할 때 11

  3. 3

    new 연산자에서 반환하는 포인터를 배열 요소에 대한 포인터로 사용할 때 정의되지 않은 동작입니까?

  4. 4

    함수에 포인터를 전달할 때 분할 오류

  5. 5

    C 다음 포인터를 설정할 때 순환 연결된 목록의 세분화 오류

  6. 6

    async / await를 사용할 때 기본값을 반환하는 오류 처리기

  7. 7

    List <DerivedClass>의 요소를 반환 할 때 공분산 오류

  8. 8

    함수에 대한 포인터를 반환하는 함수를 사용할 때 선언되지 않은 식별자 오류 (Visual Studio의 C ++)

  9. 9

    repl.it Ruby 인터프리터 : 루프를 포함하는 여러 함수를 정의 할 때 오류

  10. 10

    함수가있는 셀에 평균 또는 ""를 반환 할 때 #VALUE 오류

  11. 11

    C : 구조체로 포인터를 초기화 할 때 분할 오류

  12. 12

    C ++의 함수에서 문자열을 반환 할 때 분할 오류

  13. 13

    음의 정수를 배열로 구문 분석 할 때 프로그램 오류

  14. 14

    문자열 C 배열에 대한 포인터에 대한 strncpy를 수행하는 동안 분할 오류

  15. 15

    다른 포인터 변수에 대한 포인터를 저장하려고 할 때 분할 오류

  16. 16

    소인수 분해는 소수를 공급할 때 nil을 반환합니다.

  17. 17

    float에 대한 포인터를 반환하면 주 함수에 도달 할 때 주소가 변경됩니다.

  18. 18

    함수를 통해 구조체의 값을 변경하기 위해 포인터를 사용하려고하는데 함수에서 주소를 입력 할 때 오류가 발생합니다.

  19. 19

    포인터를 따르려고 할 때 분할 오류 : C

  20. 20

    분할 오류를 일으키는 c의 char 포인터

  21. 21

    자체 정의 된 스토리 보드를 기본 인터페이스로 설정할 때 오류 발생

  22. 22

    고정 크기 배열에 대한 포인터의 주소를 C의 포인터에 대한 포인터를 예상하는 함수에 전달할 수없는 이유는 무엇입니까?

  23. 23

    오류 : insert_id를 반환하려고 할 때 사용중인 데이터베이스에서는이 기능을 사용할 수 없습니다.

  24. 24

    std 문자열 인수가있는 템플릿 클래스는 로컬 배열을 저장소로 사용할 때 분할 오류를 제공합니다.

  25. 25

    스트림 수집기의 결과를 반환 할 때 일치하지 않는 유형 오류를 수정하려면 어떻게해야합니까?

  26. 26

    함수를 정의 할 때 포인터 또는 참조 변수에 이름이 지정되지 않음

  27. 27

    반환형 포인터 함수에서 변수의 주소를 반환 할 수 있습니까?

  28. 28

    오류를 수정하는 방법 클래스없이 반응 할 때 '정의되지 않음'또는 'null'의 속성 temperatureData를 구조화 할 수 없음

  29. 29

    포인터에 배열의 주소를 할당 할 수없는 이유는 무엇입니까?

뜨겁다태그

보관