我的問題是關於'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;
}
}
改變你的函數接受int ** vet然後調用memoria(&vet,num); '從主。也不要施加malloc或realloc的結果,因爲它可以使有價值的診斷消失,也看起來很糟糕。 – Brandin
但是矢量名稱已經是它的第一個元素的指針了!對? –
_以下代碼正常工作(沒有警告):_第一個代碼''vet'也被使用了未初始化的。 – BLUEPIXY