0

私は構造を使用するのが初めてで、現在の割り当てを文字列で読み取る必要があります

例: "{{asdfd<>}}()()()(((())))"

そして、「{、[、(、<」が表示されるたびに、それをスタックにプッシュする必要があり、上記の文字の終了バージョンが表示されるたびに、スタックをポップする必要があります。配列を大きくする必要がある場合は、 2倍に成長する必要があります。

構造体には少なくとも 3 つの変数 (要素、スタックのサイズ、スタックのトップ) が必要であることはわかっています。

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;
}
4

1 に答える 1

4

にメモリを割り当てませんdynArr。ヒープにメモリを割り当てます。

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

initまたは、スタックに割り当て、address-of演算子を使用して、関数へのポインターとして渡します。

dynArr a1;

/* ... */

init(&a1, strlen(line));
于 2013-02-20T07:28:14.683 に答える