我是新手使用结构和我们当前的作业,我们必须读取字符串
例如:“{{asdfd<>}}()()()(((())))”
并且每次我们看到“{,[,(,<”我们必须将它推到堆栈上,每当我们看到上述字符的结束版本时,我们必须弹出堆栈。当阵列需要时要成长,需要增长两倍。
我知道我们必须在结构中至少有三个变量(元素,堆栈大小,堆栈顶部)。
当我在GDB中运行程序时,它会在第一个“init”函数中出现故障。我已经坚持了一段时间。有人可以向我解释我做错了什么。
谢谢!
编辑:如果我还需要发布任何其他内容,请告诉我。再次感谢!#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 flag
void 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;
}
答案 0 :(得分:4)
您没有为dynArr
分配内存。在堆上分配内存:
dynArr* a1 = malloc(sizeof(dynArr));
或者在堆栈上分配它并使用address-of运算符将其作为指向init
函数的指针传递:
dynArr a1;
/* ... */
init(&a1, strlen(line));