0

プログラムは Linux でコア ダンプを生成しますが、Windows では正常に動作します。理由はありますか?

#include <stdio.h>

int main() {
    int i, n;
    int count[n];
    int total;
    int value;
    int d;

    printf("Enter the length of array: ");
    scanf("%d", &n);

    //printf ("total of array is %4d \n", n);

    for (i=0; i<=n-1 ; i++ ) {
        printf("Enter the number %d: ", i);
        scanf("%d", &count[i]);
        //  printf ("total of array is %4d \n", n);
    }

    //printf ("total of array is %4d \n", n);

    value = totalcalc( count, n);        
    printf ("total of array is %3d \n", value);

    scanf ("%d", &d);
}

int totalcalc(int count1[], int j)
{
    int  i, total, value;
    //printf (" Entered into function, value of j is %d \n", j);
    value = 0;
    for (i=0; i<=j-1;i++ ) {
        value = value + count1[i];
        //printf ("the value is %d\n", value);
    }
    return value;
}
4

3 に答える 3

9

この部分は非常に疑わしいです:

int i, n;
int count[n];

nは明らかに単一化されており、サイズの配列を割り当てていますn

動的サイズの配列が必要な場合は、次のように実行できます。

int* count;
printf("Enter the length of array: ");
scanf("%d", &n);

count = malloc(n * sizeof(int)); // dynamically allocate n ints on heap

value = totalcalc( count, n);

printf ("total of array is %3d \n", value);

scanf ("%d", &d);

free(count); // free memory
于 2012-10-30T16:30:06.217 に答える
7

int count[n]以前に宣言されたため、n適切に初期化されました。

于 2012-10-30T16:29:36.420 に答える
3

配列countを正しく宣言するには、その宣言nが読み取られたポイントを超えて移動します。

C99 のみのソリューション:

int main() 
{
  int i, n;
  int total;
  int value;
  int d;

  printf("Enter the length of array: ");
  scanf("%d", &n);

  int count[n]

より柔軟な (C99 以前も) ソリューション:

#if __STDC_VERSION__ >= 199901L /* going C99 */
# define NEW_ARRAY(t,a,n) t a[n]
# define DELETE_ARRAY(a)
#else
# define NEW_ARRAY(t,a,n) t * a; \ a = malloc((n) * sizeof(t)))
# define DELETE_ARRAY(a) free(a)
#endif

int main() 
{
  int i, n;
  int total;
  int value;
  int d;

  printf("Enter the length of array: ");
  scanf("%d", &n);

  {
    NEW_ARRAY(int, count, n);

    ...

    DELETE_ARRAY(count);
  }

  ...
于 2012-10-30T16:36:18.857 に答える