Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
所以我有2个结构。 1是intStk,另一个是intStkNode。 intStk包含节点和头中每个数组的大小,即最近创建的intStkNode。 intStkNode将包含一个tos int(即它所在的索引),内容(一个intStk中包含的大小为int的整数数组)和一个next(它是下一个下一个Node的int)。
因此,如果我有1个节点且大小为5,则头部将指向该节点,并且该节点的tos为0,大小为5的数组都为空,下一个为-1。
如果有两个节点且大小为5,则新节点的tos为1,数组的大小为5,下一个为9。intStk头现在将指向tos为1的tos。
到目前为止,这是我的代码,下面是我的问题。
问题。
是int currentLocation = stk-> head-> tos的语法;正确?它在第一个示例中返回0,在第二个示例中返回1吗?
stk-> head的语法是否为0;做我想做的事?这是在创建阶段,因此每次都指向tos为0的节点,但对我来说似乎很奇怪。
int * intStk-> contents [size];不管用。这是根据传递的内容确定数组大小的地方。我收到此错误,对我来说这没有意义。
intstk-l.c:33:14:错误:在'->'标记之前应为'=',',',';','asm'或'attribute'
int * intStk-> contents [size];
如果要
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
所以我有2个结构。 1是intStk,另一个是intStkNode。 intStk包含节点和头中每个数组的大小,即最近创建的intStkNode。 intStkNode将包含一个tos int(即它所在的索引),内容(一个intStk中包含的大小为int的整数数组)和一个next(它是下一个下一个Node的int)。
因此,如果我有1个节点且大小为5,则头部将指向该节点,并且该节点的tos为0,大小为5的数组都为空,下一个为-1。
如果有两个节点且大小为5,则新节点的tos为1,数组的大小为5,下一个为9。intStk头现在将指向tos为1的tos。
到目前为止,这是我的代码,下面是我的问题。
struct intStack {
unsigned int allocatedSize;
struct intStackNode * head;
};
struct intStackNode {
unsigned int tos;
int * contents;
int next;
};
struct intStackNode *
makeNewNode(intStack * stk) {
struct intStackNode * newNode = malloc(sizeof(struct intStackNode));
int currentLocation = stk->head->tos;
//this is not complete yet.
return newNode;
}
intStack *
stkCreate(unsigned int size) {
intStack * stk = malloc(sizeof(intStack));
stk->allocatedSize = size;
struct intStackNode * intStk = malloc(sizeof(struct intStackNode));
intStk->tos = 0;
stk->head = 0;
int * intStk->contents[size];
intStk->next = -1;
return stk;
}
问题。
是int currentLocation = stk-> head-> tos的语法;正确?它在第一个示例中返回0,在第二个示例中返回1吗?
stk-> head的语法是否为0;做我想做的事?这是在创建阶段,因此每次都指向tos为0的节点,但对我来说似乎很奇怪。
int * intStk-> contents [size];不管用。这是根据传递的内容确定数组大小的地方。我收到此错误,对我来说这没有意义。
intstk-l.c:33:14:错误:在'->'标记之前应为'=',',',';','asm'或'attribute'
int * intStk-> contents [size];
最佳答案
问题的答案按正确的顺序排列,没有立即解决,如下所示:
stk-> head的语法是否为0;做我想做的事?这是在创建阶段,因此每次都指向tos为0的节点,但对我来说似乎很奇怪。
它将指针stk->head
设置为空指针。它没有指向任何地方。这就引出了下一个问题。
是int currentLocation = stk-> head-> tos的语法;正确?它在第一个示例中返回0,在第二个示例中返回1吗?
由于stk->head
在创建后立即为空指针,因此尝试取消引用tos
字段的尝试会使程序的行为不确定。
int * intStk-> contents [size];不管用。这是根据传递的内容确定数组大小的地方。
不,不是。 contents
的struct intStackNode
字段是一个指针。您不能将其重新定义为数组,并且这也不可能为该指针可以指向的数组分配空间。整条线都是错的。
除此之外,您的代码(不是)包含一些细微的错误,这些错误的形式是不检查malloc
的返回值,并假定它将始终成功。
解决两个问题:
您已经分配了struct intStackNode
,因此将stk->head
指向它:
struct intStack * stk = malloc(sizeof *stk);
if(stk == NULL) {
// handle allocation error somehow.
// return from function or abort program.
// Do not just continue as if all is well.
}
stk->allocatedSize = size;
stk->head = malloc(sizeof *(stk->head));
if (stk->head == NULL) {
// another error to handle. Don'e leak resources.
free(stk);
// handle the error
}
如果要
stk->head->contents
指向size
完整的整数,则还需要分配它们:stk->head->contents = malloc(sizeof *(stk->head->contents) * size);
if (stk->head->contents == NULL) {
free(stk->head);
free(stk);
// You know the drill, handle the error.
}
08-19 18:31