在 C 中交换两个结构(动态内存分配)
Swapping Two Structs in C (Dynamic Memory Allocation)
我正在尝试在 C 中交换两个结构。问题是我必须使用 malloc()
以便在 [=] 期间为 n 个结构分配内存22=]-时间。这些结构必须使用 malloc()
分配的内存的基指针来访问。我也尝试过类型转换 (triangle*)malloc()
但这也没有用。谁能告诉我怎么做?
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct triangle
{
int a;
int b;
int c;
};
typedef struct triangle triangle;
void swapStructs(triangle *a, triangle *b)
{
triangle temp = *a;
*a = *b;
*b = temp;
}
void print_structs(triangle *tr, int n)
{
printf("VALUES BEFORE SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr->a);
printf("B[%d]: %d\n", i ,tr->b);
printf("C[%d]: %d\n", i ,tr->c);
tr++;
}
swapStructs(&tr[0], &tr[1]);
printf("VALUES AFTER SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr->a);
printf("B[%d]: %d\n", i ,tr->b);
printf("C[%d]: %d\n", i ,tr->c);
tr++;
}
}
int main()
{
int n;
scanf("%d", &n);
triangle *tr = malloc(n * sizeof(triangle));
for (int i = 0; i < n; i++)
{
scanf("%d %d %d", &tr[i].a, &tr[i].b, &tr[i].c);
}
swapStructs(&tr[0], &tr[1]);
print_structs(tr, n);
return 0;
}
它没有打印正确的输出,而是打印了垃圾值。
只需删除 tr++;
说明。
此外,print_structs
应按如下方式固定:
void print_structs(triangle *tr, int n)
{
printf("VALUES BEFORE SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr[i].a);
printf("B[%d]: %d\n", i ,tr[i].b);
printf("C[%d]: %d\n", i ,tr[i].c);
}
swapStructs(&tr[0], &tr[1]);
printf("VALUES AFTER SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr[i].a);
printf("B[%d]: %d\n", i ,tr[i].b);
printf("C[%d]: %d\n", i ,tr[i].c);
}
}
我正在尝试在 C 中交换两个结构。问题是我必须使用 malloc()
以便在 [=] 期间为 n 个结构分配内存22=]-时间。这些结构必须使用 malloc()
分配的内存的基指针来访问。我也尝试过类型转换 (triangle*)malloc()
但这也没有用。谁能告诉我怎么做?
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct triangle
{
int a;
int b;
int c;
};
typedef struct triangle triangle;
void swapStructs(triangle *a, triangle *b)
{
triangle temp = *a;
*a = *b;
*b = temp;
}
void print_structs(triangle *tr, int n)
{
printf("VALUES BEFORE SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr->a);
printf("B[%d]: %d\n", i ,tr->b);
printf("C[%d]: %d\n", i ,tr->c);
tr++;
}
swapStructs(&tr[0], &tr[1]);
printf("VALUES AFTER SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr->a);
printf("B[%d]: %d\n", i ,tr->b);
printf("C[%d]: %d\n", i ,tr->c);
tr++;
}
}
int main()
{
int n;
scanf("%d", &n);
triangle *tr = malloc(n * sizeof(triangle));
for (int i = 0; i < n; i++)
{
scanf("%d %d %d", &tr[i].a, &tr[i].b, &tr[i].c);
}
swapStructs(&tr[0], &tr[1]);
print_structs(tr, n);
return 0;
}
它没有打印正确的输出,而是打印了垃圾值。
只需删除 tr++;
说明。
此外,print_structs
应按如下方式固定:
void print_structs(triangle *tr, int n)
{
printf("VALUES BEFORE SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr[i].a);
printf("B[%d]: %d\n", i ,tr[i].b);
printf("C[%d]: %d\n", i ,tr[i].c);
}
swapStructs(&tr[0], &tr[1]);
printf("VALUES AFTER SWAPPING...\n");
for(int i=0; i<n; i++)
{
printf("A[%d]: %d\n", i ,tr[i].a);
printf("B[%d]: %d\n", i ,tr[i].b);
printf("C[%d]: %d\n", i ,tr[i].c);
}
}