1

我正在尝试为整数分配内存,但我得到一个警告分配使指针从没有强制转换的整数中生成,当我对 int 进行强制转换时,我得到一个警告,从指针转换为不同大小的整数

这是我的第一个代码:

int i;
for(i = 0 ; i < gNumOfAllFiles ; i++)
{
    int *v=(int *)malloc(1*sizeof(int));
    v=0;
    dependencies[i].visited =(int)v;
}

或者

dependencies[i].visited =v

依赖项 [i]是一个结构,包含已访问的字段int,我试图将其初始化为 0

4

3 回答 3

5

这是错误的,因为它试图将指针地址转换为整数:

dependencies[i].visited =(int)v;

改为执行此操作(以获取 v 指向的内容):

dependencies[i].visited =*v;

编辑:另外,设置指针的内容使用 *v=0; 而不是 v=0;

于 2013-11-11T14:47:48.370 回答
1

v包含一块内存的地址。
(int)v将此地址转换为整数,这几乎是无意义的操作。

您想使用取消引用运算符获取占用该地址内存的值:

int value = *v;

同样,v = 0使您的指针指向内存地址0(为 NULL),并泄漏您使用分配的内存malloc()

您可以使用解引用运算符将​​值存储在指针指向的内存中:

*v = 0;
于 2013-11-11T14:47:44.040 回答
0

利用dependencies[i].visited =*v;

于 2013-11-11T14:47:51.580 回答