C 使用函数初始化结构
这是我的主要任务C 使用函数初始化结构,c,struct,initialization,C,Struct,Initialization,这是我的主要任务 int main(){ int size = 5; Path Solution; PathInit(&Solution,size); printf("Size: %d\n",Solution.size); printf("top: %d", Solution.top); } 这在我的道路上 typedef struct{ int size; int top; int *item; }Path; 这是我的路 void PathInit(Path *P, int vs
int main(){
int size = 5;
Path Solution;
PathInit(&Solution,size);
printf("Size: %d\n",Solution.size);
printf("top: %d", Solution.top);
}
这在我的道路上
typedef struct{
int size;
int top;
int *item;
}Path;
这是我的路
void PathInit(Path *P, int vsize){
P = (Path *)malloc(sizeof(Path));
P->size = vsize;
P->item = (int *)malloc(sizeof(int)*vsize);
P->top = -1;
}
预期产量为
Size: 5
top: -1
然而,输出是沿着
Size: 3412832
top: 0
有人能解释一下为什么我的结构没有正确初始化吗。此外,这还不是我的全部代码,但我已将问题缩小到这些部分。任何帮助都会很好。谢谢您正在使用堆栈:
Path Solution;
并传递一个指针:
PathInit(&Solution,size);
因此,您不需要使用malloc
来保留空间:
void PathInit(Path *P, int vsize){
P = (Path *)malloc(sizeof(Path)); /* Remove this line */
正如@altermann的回答中所提到的,问题是您弄乱了堆栈存储,这是一种未定义的行为。如果要使用动态分配,则需要将指针传递给指针(顺便说一句),以便在函数中修改它,如:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int size;
int top;
int *item;
} Path;
void PathInit(Path **P, int vsize) { // pass pointer to pointer so we can modify it
*P = malloc(sizeof(Path)); // No need (and not recommended) to cast malloc in C
(*P)->size = vsize;
(*P)->item = malloc(sizeof(int) * vsize);
(*P)->top = -1;
}
int main() {
int size = 5;
Path* Solution; // this is now a pointer
PathInit(&Solution, size);
printf("Size: %d\n", Solution->size);
printf("top: %d", Solution->top);
free(Solution->item);
free(Solution);
}
就这样说吧
Path* Solution;
Solution = PathInit(size);
非常感谢,这真的很有帮助:D
Path* Solution;
Solution = PathInit(size);