c - stackInit 函数出现段错误,我不明白为什么

标签 c data-structures struct stack dynamic-arrays

我不熟悉使用结构和我们当前的分配,我们必须读取一个字符串

例如:“{{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;
}

最佳答案

您没有为 dynArr 分配内存。要么在堆上分配内存:

dynArr* a1 = malloc(sizeof(dynArr));

或者在堆栈上分配它并使用寻址运算符将它作为指向 init 函数的指针传递:

dynArr a1;

/* ... */

init(&a1, strlen(line));

关于c - stackInit 函数出现段错误,我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14974430/

相关文章:

iOS:为什么你不能在结构中有对象?

c - 系统小程序 : Assertion failed - How can I solve?

c - 通过 OpenMP SIMD 进行的 256 位矢量化会阻止编译器的优化(比如函数内联)?

mysql - 存储大量数据的最佳方法

c - C中生产者-消费者的线程安全环形缓冲区

c - 如何对使用结构的指针数组进行排序?

完全证明文件中的文本的 C 程序

c - 使用 Openpicus 的 Microchip C30 编译器编译时出现链接错误

c - 向二叉搜索树添加节点随机删除节点

c++ - 计算结构大小而不填充字节的函数