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

まず、あなたは(void *型)malloc関数のようにスペースを割り当て、デフォルトでよう(int型*)へのmalloc割り当てられている領域を型キャストすることができます。 SEcondly、ループj = 0〜8すなわち9回実行していますが、ちょうど8のためのスペースが割り当てられています。範囲外のエラーの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

関連する問題