#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int *alocare(int *a, int *n)
{
printf("Introduceti numarul de elemente din sir");
scanf("%d", n);
a = (int*)(malloc(*n*sizeof(int))); //alocam memorie dinamica (in zona Heap) pentru memorarea unui vector in mod dinamic de n elemente
if (!a)
{
printf("Eroare la alocare\n");
return 0;
}
return a;
}
void citire(int *a, int n)
{
for (int i = 0; i < n; i++)
{
printf("\telem %d\n", i + 1);
scanf("%d", &a[i]);
}
}
void afisare(int *a, int n)
{
for (int i = 0; i < n; i++)
printf("%d\n", a[i]);
}
void main(void)
{
int *a, n;
a=alocare(a, &n);
citire(a, n);
afisare(a, n);
_getch();
}
我得到的错误是
错误C4700:使用了单位化的局部变量'a'。
我如何初始化变量a
?为什么必须初始化?因为我有分配功能。
答案 0 :(得分:1)
您正在函数调用a
中传递alocare(a, &n);
未初始化。可以从函数返回指向动态分配的内存的指针。删除参数int *a
并在a
中将alocare
声明为局部变量:
int *alocare(int *n)
{
printf("Introduceti numarul de elemente din sir");
scanf("%d", n);
// Local declaration of pointer a
int *a = malloc(*n*sizeof(int));
if (!a)
{
printf("Eroare la alocare\n");
return 0;
}
return a;
}
并将函数调用为
a = alocare(&n);