2016-07-15 3 views
-5
#include<stdio.h> 
#include<stdlib.h> 
int main() { 
    int i, j, a[10], result = 0,p; 
    int *m = malloc(sizeof(int)*8); 
    for(i = 0; i < 10; i++){ 
     scanf("%d", &a[i]); 
     result += a[i]; 
    } 
    //printf("%d\n", result); 
    //printf("\n"); 
    //for(i = 0; i < 8; i++) { 
    for(j = 0; j < 9; j++) { 
     scanf("%d", &m[j]); 
     result = result - m[j]; 
     p = result/2; 
    } 
    return p; 
} 

이 코드에서 런타임 오류가 발생합니다. 어떤 도움을 주시면 감사하겠습니다. 감사!다음 코드에 대한 런타임 오류가 발생했습니다.

+2

오류에 대한 자세한 정보를 제공 할 수 있습니까? ? – Jeremy

+1

런타임에 오류가 발생하기 때문에 코드를 보면 도움이되지 않습니다. 우리는 오류가 무엇인지 알아야하며 런타임에 오류가 발생했는지 확인해야합니다. – durbnpoisn

+2

디버거 사용 방법을 익히십시오. 디버거에서 실행하면 "작동 중"의 크래시를 잡아 코드에서 어디에서 발생하는지 알려줍니다. 그런 다음 디버거를 사용하여 변수 값을 검사하여 왜 충돌이 발생했는지 알 수 있습니다. 적어도 *** 코드에서 충돌이 발생하고 모든 관련 변수의 값이 무엇인지 알려주는 질문을 편집하십시오. –

답변

3

할당 된 메모리가 부족합니다.

int *m=malloc(sizeof(int)*8); // 8 `int` 
... 
for(j=0;j<9;j++){ 
    scanf("%d",&m[j]);   // attempt to set the the 9th `int`, m[8] 

충분한 메모리를 할당하십시오.

#define JSIZE 9 
int *m=malloc(sizeof *m * JSIZE); 
if (m == NULL) Handle_OutOfMemory(); 
... 
for(j=0;j<JSIZE;j++){ 
    if (scanf("%d",&m[j]) != 1) Handle_BadInput(); 
0

첫째, 당신은 (* 무효)의 malloc과 같이 공간을 할당 기본적으로 (INT의 *)에 malloc에 ​​할당 된 공간을 타입 변환 할 수 있습니다. SEcondly, 루프 j = 0 ~ 8 즉 9 번 실행하고 있습니다. 단 8 개의 공간을 할당했습니다. boundof 오류가있는 kindof 배열 인덱스가 있습니다.

+0

dev C++ 같은 컴파일러는 "(void *)에서 (int *) 로의 변환이 잘못되었습니다"라는 오류 메시지가 나타납니다. – oreo

+0

오케이. 감사. – oreo

+0

추천 제안 [malloc의 결과를 캐스팅합니까?] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) 및 [이 답변] (http : // stackoverflow.com/a/605856/2410359) – chux

관련 문제