我想通过void函数的引用返回一个动态数组。 我已经搜索了3个小时的答案,找不到任何有用的东西。 这是我的简化代码:
main()
{
int **a;
xxx(&a);
printf("%d\n\n", a[1]);
}
void xxx(int **a)
{
int i;
*a = (int*)malloc(5 * 4);
for (i = 0; i < 5; i++)
a[i] = i;
printf("%d\n\n", a[1]);
}
我只是想在“xxx”函数中分配动态数组并通过引用返回它,而不是我想打印它或者用它来做其他事情。在此先感谢:)
编辑
#include <stdio.h>
#include <stdlib.h>
#define MACROs
#define _CRT_SECURE_NO_WARNINGS
void xxx(int **a);
int main(void)
{
int *a;
xxx(&a);
printf("%d\n\n", a[1]);
}
void xxx(int **a)
{
int i;
*a = malloc(5 * sizeof(**a));
for (i = 0; i < 5; i++)
a[i] = i;
printf("%d\n\n", a[1]);
}
答案 0 :(得分:1)
我修改了一些内容并添加了一些评论。
#include <stdio.h> // please inlcude relevant headers
#include <stdlib.h>
#define ELEM 5 // you can change the requirement with a single edit.
void xxx(int **a) // defined before called - otherwise declare a prototype
{
int i;
*a = malloc(ELEM * sizeof(int)); // do not use magic numbers, don't cast
if(*a == NULL) {
exit(1); // check memory allocation
}
for (i = 0; i < ELEM; i++) {
(*a)[i] = i; // index correctly
}
}
int main(void) // 21st century definition
{
int *a; // correct to single *
int i;
xxx(&a);
for (i = 0; i < ELEM; i++) { // show results afterwards
printf("%d ", a[i]);
}
printf("\n");
free(a); // for completeness
}
节目输出:
0 1 2 3 4
答案 1 :(得分:0)
在你的main()
中,你需要一个指针,而不是一个指向指针的指针。变化
int **a;
到
int *a;
并且,在xxx()
内,更改
a[i] = i;
到
(*a)[i] = i;
那说
不要使用幻数,重写像
这样的malloc语句*a = malloc(5 * sizeof(**a));
更强大。此外,对于静态计数,请使用#define
MACRO。
Please see this discussion on why not to cast the return value of malloc()
and family in C
.
main()
不是托管环境的有效签名。您至少需要使用int main(void)
。答案 2 :(得分:-1)
好的家伙所以让它发挥作用的是
a[i] = i;
到
(*a)[i] = i;
这么简单的答案需要3个小时。 非常感谢大家。 有人可以解释为什么会出现问题吗?