为双指针赋值

时间:2013-10-08 02:45:32

标签: c

我为r分配了内存,这是一个指向struct的双指针。 但是,当我试图使用这个变量时,我收到了一个错误:

错误消息

read-command.c:461:7: error: lvalue required as left operand of assignment
   r+i = postfixToTree(postfix_string, &csPtr->nodeArray[i]);
       ^
make: *** [read-command.o] Error 1

用法

r+i = postfixToTree(postfix_string, &csPtr->nodeArray[i]);

声明

声明

   int b;
    struct command** r;
    r = (struct command**) malloc(50 * sizeof(struct command*));
    for( b=0; b<50; b++){
      *(r+b)=(struct command*) malloc(50*sizeof(struct command));
    }

如何为r分配值?

3 个答案:

答案 0 :(得分:2)

C赋值的一般语法。

    Lvalue=Rvalue;

高于Rvalue可以是表达式或函数调用的结果,也可以是同一类型或常量的另一个变量,Lvalue是一个能够存储Rvalue的变量。

r+i = postfixToTree(postfix_string, &csPtr->nodeArray[i]);  

^^^   

尝试在Lvalue的位置将i值添加到r。

在C中,左手侧不应有任何评估部分。

先添加,然后分配

  r=r+i; //r+=i; 
  r = postfixToTree(postfix_string, &csPtr->nodeArray[i]);     

你可以写上面的陈述如下

  r[i] = postfixToTree(postfix_string, &csPtr->nodeArray[i]);     

每次打电话给postfixToTree()

时都是如此
for( b=0; b<50; b++)
  *(r+b)=(struct command*) malloc(50*sizeof(struct command));

您要在此50上创建struct command的{​​{1}}份副本。这样做会泄漏大量内存。

同样each iteration分配了free()内部函数的内存。

答案 1 :(得分:1)

这是你想要的吗?请确保包含stdlib.h,不需要malloc演员,*(r+b)等同于r[b]

#include <stdlib.h>

struct command {
    int x; // just a definition to compile
};

int main()
{
    int b;
    struct command** r;
    r = malloc(50 * sizeof(struct command*));
    for( b=0; b<50; b++) {
        r[b] = malloc(50*sizeof(struct command));
    }
}

答案 2 :(得分:0)

我认为你的指针做错了。

这样做,

 int b;
    struct command** r;
    r = (struct command**) malloc(50 * sizeof(struct command*));
    for( b=0; b<50; b++){
      *(r) + b=(struct command*) malloc(50*sizeof(struct command));
    }