2017-11-22 16 views
-3

私はこの演習で何時間も立ち往生していません。動的メモリ割り当て、各入力後の合計の再割り当てと計算

enter image description here

あなたは、参照番号を取得し、動的にメモリを割り当て、その数はマイナスであれば、それのサイズを小さくし、各入力後に合計を計算することができたよう。

私のコードは次のようになります:メモリの割り当てが正常に動作していない

#include <stdio.h> 
#include <stdlib.h> 

void main() 
{ 
    int number; 
    int count = 1; 
    int sum = 0; 
    int *ap; 
    printf("Input Value = "); 
    scanf_s("%d", &number); 
    ap = (int*)malloc(sizeof(int)*count); 
    *ap = number; 
    sum += *ap; 
    printf("sum = %d\n", sum); /*getting the first value*/ 

    for(; ;) 
    { 
     printf("Input Value = "); 
     scanf_s("%d", &number); 
     if (number < 0) 
     { 
      count--; /*reducing the size*/ 
      ap = (int*)realloc(ap, sizeof(int)*count); 
      for(int i=0; i<sizeof(ap)/sizeof(ap[0]); i++) 
      { 
       sum+=*ap; 
      } 
      printf("sum = %d\n", sum); 
     } 
     else 
     { 
      count++; /*increasing the size*/ 
      ap = (int*)realloc(ap, sizeof(int)*count); 
      *(ap+(count-1)) = number; 
      for(int i=0; i<sizeof(ap)/sizeof(ap[0]); i++) 
      { 
       sum+=*ap; 
      } 
      printf("sum = %d\n", sum); 
     } 
    } 
    free(ap); 
} 

私ははsizeof(AP)をプリントアウトしたときに、それは常に4、いない4、8、12を印刷するので、私は、仮定します..

誰かが私の間違いを指摘してくれることを願っています!ありがとうございました。

+0

おそらく、デバッガが間違いを指摘する可能性があります。 – zerkms

+1

https://stackoverflow.com/help/how-to-ask あなたの質問は、他の人が答えを得ることができるように、助けが必要なプログラムの特定の部分に絞ってください。 –

+0

'ap'はあなたのコンピュータ上の明らかに4バイトのポインタです。ターゲットの内容を変更しても、ポインタのサイズには影響しません。 –

答えて

1

あなたのコードの主な問題はここにある - あなたが見

for(int i=0; i<sizeof(ap)/sizeof(ap[0]); i++) 

sizeofはポインタ(ここではap)で使用する場合、一定の値を返す演算子です。 apが配列であってもポインタではないとうまくいくでしょう。

あなたが使用する必要があるのは、apのサイズを把握するためのもう1つの変数で、すでにcountです。

sizeof(ap)/sizeof(ap[0])の代わりにcountを使用してください。

また、デバッガでこれらのエラーを簡単に指摘することができるため、将来的にはデバッガを使用する方法についても学びます。

関連する問題