如何在 C 中正确使用 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 evenn");
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]);
}
}

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

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

int *ar;
char sort[5];
void main()
{    
printf("Enter odd or evenn");
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]);
}
}

相关内容

  • 没有找到相关文章

最新更新