我为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分配值?
答案 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));
}