我对使用结构和我们当前的任务还不熟悉,我们必须在字符串中读取例如:“{{asdfd}}()((()))”每次我们看到一个{,[,(,我知道我们在结构中必须至少有三个变量(元素、堆栈大小、堆栈顶部)。当我在GDB中运行我的程序时,它在第一个“in it”函数中seg faults。我被困在这上面有一段时间了。有人能告诉我我做错了什么吗。谢谢!编辑:如果我还有什么需要发布的,请告诉我。再次感谢!#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct dynArrStruct{ char *location; int length; int currSize;}dynArr;int checkFlag(int, char**); //checks for the -d flagvoid init(struct dynArrStruct*, int);void push(struct dynArrStruct*, char);void printAll(struct dynArrStruct*);int main(int argc, char** argv){ int testFlag, i, size = 0; char line[300]; dynArr* a1; printf("Enter a string to be checked: "); scanf("%s", line); init(a1, strlen(line)); if(argc > 1) testFlag = checkFlag(argc, argv); for(i = 0; i < strlen(line); i++) if(line[i] == '(' || line[i] == '{' || line[i] == '[' || line[i] == '<') { size += 2; init(a1, size); //rest of code here } // stuff}void init(dynArr* a, int size){ a->location = (char *)malloc(sizeof(char) * (size_t)(size)); //SEGFAULT a->length = size; a->currSize = 0;} (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您不为dynArr分配内存。在堆上分配内存:dynArr* a1 = malloc(sizeof(dynArr));或者将其分配到堆栈上,并使用address of operator将其作为指向init函数的指针传递:dynArr a1;/* ... */init(&a1, strlen(line)); (adsbygoogle = window.adsbygoogle || []).push({});