2016-07-15 4 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

Во-первых, вы можете типаж в таНос выделенное пространство для (INT *), как по умолчанию таНос выделяет пространство как (пустоте *). SEcondly, вы запускаете цикл j = 0 до 8, т. Е. 9 раз, но у вас выделено место только для 8.Hence у вас есть индекс массива вида за пределами ошибки.

+0

компиляторы, такие как dev C++, выдадут ошибку - «неверное преобразование из (void *) в (int *)» – oreo

+0

ok, я получаю вашу точку. Благодарю. – oreo

+0

Предлагаем прочитать [Я делаю результат malloc?] (Http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) и [этот ответ] (http: // stackoverflow.com/a/605856/2410359) – chux

Смежные вопросы