我的程序如下
#include<stdio.h>
int *intial(int);
int main (void)
{
int i, *b;
b=intial(5);
for(i=0;i<5;i++)
printf("%d\t",*(b+i));
getch();
}
int *intial(int t)
{
int i, *a;
for(i=0;i<t;i++)
a[i]=i;
return a;
}
但我得到了垃圾值。
我也试过这个
int *intial(int t)
{
int i, a[10];
for(i=0;i<t;i++)
a[i]=i;
return a;
}
但它没有用。
答案 0 :(得分:3)
为了正常工作,您的功能应该是
int *intial(int t)
{
int i;
int *a = malloc(t * sizeof(*a));
if (!a) return NULL; // error checking
for(i=0;i<t;i++) {
a[i]=i;
}
return a;
}
此函数的“调用条约”是返回的指针是一个malloc()
,调用者有义务free()
它。
当然,调用者也应该进行适当的错误检查:
int main()
{
int i;
int *b;
b=intial(5);
if (!b) {
fprintf(stderr, "Malloc error.\n");
return 1;
}
for(i=0;i<5;i++) {
printf("%d\t",*(b+i)); // *(b+i) should be replaced with b[i] for readability
}
free(b); // free the memory
return 0;
}
答案 1 :(得分:2)
您需要使用malloc()
为数组分配内存。否则a
以及b
将不会特别指出任何内容。