Malloc不会输入超过8个输入

时间:2017-03-16 16:06:15

标签: c arrays malloc

我的程序需要3行输入。第一行是你想要按奇数还是偶数排序,第二行是数组的大小,第三行是数组中的整数。它一直有效,直到你使用大于8的数组。我相信它与malloc有关但我已经尝试调试这段代码几个小时了,我无法解决这个问题。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* sort;
int n;
int* ar;
int i;

int test()

{
    int temp;
    int j = 1;

    //printf("%s", sort);

    if (strcmp(sort, "odd") == 0) {

        for (i = 0; i < n;) {

            if (j != n) {

                if (ar[i] % 2 != 0) {

                    if (ar[j] % 2 != 0) {

                        if (ar[j] < ar[i]) {

                            temp = ar[i];
                            ar[i] = ar[j];
                            ar[j] = temp;
                            j++;
                        }
                        else {
                            j++;
                        }
                    }
                    else {

                        j++;
                    }
                }
                else {
                    j++;
                    i++;
                }
            }
            else {

                i++;
                j = i + 1;
            }
        }
    }

    if (strcmp(sort, "even") == 0) {
        for (i = 0; i < n; i++) {

            if (j != n) {

                if (ar[i] % 2 == 0) {

                    if (ar[j] % 2 == 0) {

                        if (ar[j] < ar[i]) {

                            temp = ar[i];
                            ar[i] = ar[j];
                            ar[j] = temp;
                            j++;
                        }
                        else {
                            j++;
                        }
                    }
                    else {

                        j++;
                    }
                }
                else {
                    j++;
                    i++;
                }
            }
            else {

                i++;
                j = i + 1;
            }
        }
    }
}

void main()
{

    ar = malloc(sizeof(int) * n);
    sort = malloc(sizeof(char) + 1);

    printf("Enter odd or even\n");
    scanf("%s", sort);

   // printf("please input odd or even\n");

    printf("Enter the size of the array \n");
    scanf("%d", &n);

    //printf("%s", sort);

    printf("Enter the elements of the array \n");
    for (i = 0; i < n; i++) {

        scanf("%d", &ar[i]);
    }

    test();

    for (i = 0; i < n; i++) {

        printf("%d ", ar[i]);
    }

    // return 0;
}

1 个答案:

答案 0 :(得分:2)

代码通常以线性方式执行,但您似乎并没有这样做。您使用ar分配n,但在n之前没有值,直到几行之后......

ar = malloc(sizeof(int) * n);
sort = malloc(sizeof(char) + 1);

printf("Enter odd or even\n");
scanf("%s", sort);

// printf("please input odd or even\n");

printf("Enter the size of the array \n");
scanf("%d", &n);

您还没有将sort的大小分配到足以包含超过1个字符的任何字符串。