我的问题是关于realloc
.
以下代码可以正常工作(没有警告):
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int num=10;
int *vet;
int i;
for (i=0; i<num; i++)
{
/* allocate memory of vet to contains (i+1) int */
vet = (int*) realloc ( vet, (i+1) * sizeof(int) );
/* write numbers in the allocated memory */
vet[i] = 321 + i;
}
/* print test, if all works I must see:
| 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | */
printf ("| ");
for (i=0; i<num; i++)
printf ("%d | ", vet[i]);
printf ("\n");
return 0;
}
但是同一个程序加上一个函数就不行了!并且编译器返回以下警告:
In function ‘main’:
14:10: warning: ‘vet’ is used uninitialized in this function [-Wuninitialized]
代码是:
#include <stdio.h>
#include <stdlib.h>
void memoria (int *, int);
int main ()
{
int *vet, num=10;
memoria (vet, num);
/* print test, if all works I must see:
| 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | */
int i;
printf ("| ");
for (i=0; i<num; i++)
printf ("%d | ", vet[i]);
printf ("\n");
return 0;
}
void memoria (int *vet, int num)
{
int i;
for (i=0; i<num; i++)
{
/* allocate memory of vet to contains (i+1) int */
vet = (int*) realloc ( vet, (i+1) * sizeof(int) );
/* write numbers in the allocated memory */
vet[i] = 321 + i;
}
}
有人可以告诉我为什么吗?非常感谢!
哦,在主要作品中使用“随机”malloc 的相同代码(带有该函数)...
#include <stdio.h>
#include <stdlib.h>
void memoria (int *, int);
int main ()
{
int *vet, num=10;
/* ADDED MALLOC */
vet = (int*) malloc (1);
memoria (vet, num);
/* print test, if all works I must see:
| 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | */
int i;
printf ("| ");
for (i=0; i<num; i++)
printf ("%d | ", vet[i]);
printf ("\n");
return 0;
}
void memoria (int *vet, int num)
{
int i;
for (i=0; i<num; i++)
{
/* allocate memory of vet to contains (i+1) int */
vet = (int*) realloc ( vet, (i+1) * sizeof(int) );
/* write numbers in the allocated memory */
vet[i] = 321 + i;
}
}