【发布时间】:2014-01-30 19:19:41
【问题描述】:
我的问题是关于“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,然后从 main 调用
memoria(&vet, num);。也不要转换 malloc 或 realloc 的结果,因为它会使有价值的诊断静音,而且看起来很糟糕。 -
以下代码正常工作(没有警告):第一个代码
‘vet’ is used uninitialized也是。 -
gcc version 4.8.1没有警告(现已测试)! -
@user malloc 和 realloc 给出一个新的指针,所以你的函数必须能够改变“第一个元素”的开始位置
-
一些警告,例如未使用的变量,只有在使用优化器时才会产生。它不一定是
-O3,但您确实需要在命令行上使用某种形式的-O。
标签: c function initialization realloc