我有一個更復雜的專案,我(盡我所能)將我的問題簡化為您可以在此處看到的代碼。
我懷疑問題出在檔案 Bc 中的函式 create_B() 和/或當我從檔案 Ac 呼叫此函式時。或者也許我的 x 和 y 也應該是指標?如您所知,我只是在學習 C 編程,任何幫助/解釋將不勝感激。
乙:
#ifndef B_H
#define B_H
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct B B;
typedef B *B_ptr;
struct B
{
int x;
int y;
};
B_ptr create_B(int x, int y);
#endif
公元前:
#include "B.h"
B_ptr create_B(int x, int y) {
B_ptr b = (B_ptr)malloc(sizeof(B));
b->x;
b->y;
return b;
}
啊:
#ifndef A_H
#define A_H
#include "B.h"
typedef struct A A;
typedef A *A_ptr;
struct A
{
B_ptr *list_of_10_pointers;
};
A_ptr create_A();
#endif
交流:
#include "A.h"
A_ptr create_A()
{
A_ptr a = (A_ptr)malloc(sizeof(A));
if (!a)
return NULL;
B_ptr *list = (B_ptr *)malloc(10 * sizeof(B_ptr));
if (!list)
return NULL;
a->list_of_10_pointers = list;
for (size_t i = 0; i < 10; i )
{
// list[i] = (B_ptr)malloc(sizeof(B));
list[i] = create_B(i 1, i 2);
}
return a;
}
主要.c:
#include <stdio.h>
#include "A.h"
int main(int argc, char **argv)
{
A_ptr a = create_A();
for (size_t i = 0; i < 10; i )
{
printf("x=%d\n", a->list_of_10_pointers[i]->x);
printf("y=%d\n", a->list_of_10_pointers[i]->y);
}
return 0;
}
編譯: gcc Main.c Ac Bc -o out
輸出:
x=0
y=0
x=0
y=0
.
.
.
x=0
y=0
uj5u.com熱心網友回復:
編譯給出這些警告:
$ gcc Main.c A.c B.c -o out
B.c:5:8: warning: expression result unused [-Wunused-value]
b->x;
~ ^
B.c:6:8: warning: expression result unused [-Wunused-value]
b->y;
~ ^
2 warnings generated.
這幾乎直接導致更改B.c
為:
#include "B.h"
B_ptr create_B(int x, int y) {
B_ptr b = (B_ptr)malloc(sizeof(B));
b->x = x;
b->y = y;
return b;
}
然后輸出變為:
$ ./out
x=1
y=2
x=2
y=3
x=3
y=4
x=4
y=5
x=5
y=6
x=6
y=7
x=7
y=8
x=8
y=9
x=9
y=10
x=10
y=11
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/493270.html
上一篇:如果我們在c中使用malloc將記憶體分配給同一個指標兩次會發生什么?
下一篇:這個指標繪制正確嗎?