如何在C中正确使用malloc?

时间:2017-03-17 03:18:38

标签: c arrays pointers malloc

我试图在我的程序中使用malloc分配一些内存(我没有太多使用malloc的经验,因为我刚开始学习如何使用它)。我创建的程序有效,但我认为我没有正确使用malloc,我想学习如何正确使用它。

我的程序的基本思想是需要3行输入。第一行是你想要按奇数还是偶数排序,第二行是数组的大小,第三行是数组中的整数。

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

void test()

{
    int temp;
    int j = 1;

    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) * 10);
    sort = malloc(sizeof(char) + 5);

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

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

    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]);
    }
}

1 个答案:

答案 0 :(得分:2)

您需要等到他们告诉您数组的大小,然后使用malloc()分配一个大小的数组。

您不需要对malloc使用sort,您可以将其声明为普通数组。通常,当您需要分配动态数量的项目时,或者当项目的大小是动态的时,您使用malloc(),对于具有固定大小的单个项目,您不需要它。

int *ar;
char sort[5];

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

    printf("Enter the size of the array \n");
    scanf("%d", &n);
    ar = malloc(n * sizeof(int));

    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]);
    }
}