我以前沒寫過C
,我現在要做的事情是:在函式1里定義一個可變長陣列,然后傳回主函式,在函式2里使用這個陣列。我簡單寫了一段程式,遇到兩個問題:
(1)用malloc定義了可變長陣列arr以后,不能訪問arr[1] arr[2]等元素,只能訪問arr[0]。
(2)傳進函式2的數值完全不對,看起來是亂數值。
望高手不吝賜教,謝謝!
#include <stdio.h>
#include <stdlib.h>
struct array
{
int n;
int *arr;
};
static struct array *func1();
static int func2(struct array *);
struct array *func1()
{
struct array *p1;
struct array p1_t;
int i , n;
n = 16; // assume n will change based on user input
p1 = &p1_t;
p1->n = n;
p1->arr = (int *)malloc(sizeof(int) * n);
for (i = 1 ; i <= n ; i++) p1->arr[i - 1] = i;
return p1;
}
int func2(struct array *p2)
{
int i , n;
n = p2->n;
for (i = 1 ; i <= n ; i++) p2->arr[i - 1] = n + 1 - i;
return 1;
}
int main()
{
struct array *p;
int i , n;
p = func1();
n = p->n;
for (i = 1 ; i <= n ; i++) printf("%d, " , p->arr[i - 1]);
printf("after func1.\n");
func2(p);
for (i = 1 ; i <= n ; i++) printf("%d, " , p->arr[i - 1]);
printf("after func2.\n");
return 1;
}
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
struct array
{
int n;
int *arr;
};
static struct array *func1();
static int func2(struct array *);
struct array *func1()
{
#if 0
struct array *p1;
struct array p1_t;
int i , n;
n = 16; // assume n will change based on user input
p1 = &p1_t;
p1->n = n;
p1->arr = (int *)malloc(sizeof(int) * n);
for (i = 1 ; i <= n ; i++) p1->arr[i - 1] = i;
return p1; //回傳的是p1_t的地址,這個地址是區域變數的地址,根據區域變數的生命周期是本函式內,因此回傳的p1無效,還導致記憶體泄露,因為malloc的沒釋放。
#else
struct array *p1;
int n, i;
p1 = (struct array *)malloc(sizeof(struct array));
if (!p1)
exit(0);
n = 16;
p1->n = n;
p1->arr = (int *)malloc(sizeof(int) * n);
if (!p1->arr) {
free(p1);
exit(0);
}
for (i = 1; i<= n; i++)
p1->arr[i-1] = i;
return p1;
#endif
}
int func2(struct array *p2)
{
int i , n;
n = p2->n;
for (i = 1 ; i <= n ; i++)
p2->arr[i - 1] = n + 1 - i;
return 1;
}
int main()
{
struct array *p;
int i , n;
p = func1();
n = p->n;
for (i = 1 ; i <= n ; i++)
printf("%d, " , p->arr[i - 1]);
printf("after func1.\n");
func2(p);
for (i = 1 ; i <= n ; i++)
printf("%d, " , p->arr[i - 1]);
printf("after func2.\n");
free(p->arr);
free(p);
return 1;
}
供參考~
uj5u.com熱心網友回復:
我尋思著你這也不是可變陣列而是鏈表啊,你可以找找怎么寫鏈表的看看轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/249138.html
標籤:C語言
