큰 데이터를 입력하려고 할 때만 오류가 발생합니다. 많은 자원을 읽은 후에 다음과 같이이 오류의 원인을 발견했습니다 : 1. 우리가 허용되지 않은 메모리 위치를 건드렸다. 2. 우리가 예약하지 않은 메모리에 free()를 사용하거나 포인터를 두 번 free()합니다. 3. (부정적인 인덱스 배열을 만드는 등의) 유효하지 않은 인덱스를 초기화 내 코드 -이 오류의 원인이 될 수있는 하나의 원인을 발견내 C 코드에서 SIGABRT 오류의 원인은 무엇이며이를 극복하는 방법은 무엇입니까?
링크 - https://discuss.codechef.com/questions/59703/prime-number-generation-sigabrt-problem-c
"이 제한 될 수 있습니다 says- on n은 꽤 큽니다! atmost은 온라인 심사 위원을 위해 10^8 크기의 배열을 만들 수 있습니다. 주 기능의 힙 메모리 즉, 주 기능 외에도 10^7 크기의 배열을 만들 수 있습니다. 런타임 오류가 발생합니다 배열에 10^8 개 요소를 사용하지 마십시오. :)
당신이 시도하는 질문에서 상한선은 10^9입니다. 그 크기의 배열을 만들 수 있습니다. 그게 왜 내가 알게 당신이 다음 메모리 제한. "
을 초과 내가
int main(void)
{
int test_cases;
scanf("%i",&test_cases);
for (int i=0; i<test_cases; i++)
{
findresult(i);
}
void findresult(int i)
{
int relations; // of the size 10^6
scanf("%i",&relations);
int* pair1 = malloc(sizeof(int)*relations);
int* pair2 = malloc(sizeof(int)*relations);
for (int j=0; j<relations; j++)
{
scanf("%i %i",&pair1[j],&pair2[j]);
}
를 this-하는 선언과 입력 부분을 수정 의미 SIGABRT 오류입니다 관계 INT 큰 배열 int pairs[relations][2]
을 (만들기 10^6) 스택 메모리에이 오류가 발생하고 주요 함수 자체에서 같은 큰 배열을 만드는 또한 오류가 발생합니다. 그래서 위의 코드에서 볼 수 있듯이, 나는 함수를 만들고 힙에 메모리를 할당했습니다. , malloc (pair1 및 pair2) 사용하고 있습니다. 여전히 동일한 오류가 발생하고 있습니다. 또한 작은 데이터를 잘 작동하는 것처럼 나머지 코드에서 오류가 없습니다. 문제가 큰 크기의 배열을 만드는 관련된 참으로 그때 문제를 극복하는 방법을 도와주세요.
EDIT 1- 코드 설명 - 모든 테스트 케이스 "i"에 대해 "findresult"함수가 호출됩니다. 모든 "i"에 대해이 함수는 두 개의 정수에 대한 입력을 취하고 두 번째 입력 "관계"에 따라 두 개의 정수 "크기"배열을 선언합니다. 그런 다음 두 배열의 모든 요소에 대해 사용자 입력을 입력하십시오. 나머지 함수들은 단지 배열을 읽고 몇몇 조건을 검사하는 것만 포함합니다.
편집 2 모든 데이터를 먼저 저장 한 다음 모든 데이터의 정확성이 필요한 조건 확인을 수행해야합니다. 나는 그것을 하나 하나 처음에는
링크의 코드는 채우기 대신'n [번] (버퍼의 경계 외부에있는) [start [n]]에 씁니다. 그리고 게시 한 코드는 [MCVE] (http://stackoverflow.com/help/mcve)가 아닙니다. – StoryTeller
예, 당신은 그 코드에 대해 옳았습니다. 그러나 그 링크를 제공하려는 제 목적은 정보의 출처가 괜찮은 포럼의 높은 레버 기여자임을 보여주는 것이 었습니다. 그리고 내가 문제를 분명하게하기 위해 게시 한 코드에 대한 설명을 해주었습니다. –
다시 mcve 문제를 참조하십시오. 문제 코드에 대한 설명을 그만 두십시오. 가능한 가장 작은 예제로 보여주십시오. – StoryTeller