2013-02-20 68 views
0

我是新來使用的結構和我們當前的任務,我們有一個字符串stackInit功能是賽格斷層,我不理解爲什麼

例如爲:「{{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

[請不要投malloc()'在C]中的返回值(http://stackoverflow.com/a/605858/28169)。而且,'sizeof(char)'是相當無意義的;它總是會是1. – unwind 2013-02-20 07:40:27

+0

@unwind我不完全同意sizeof(char)是毫無意義的。儘管它始終爲0,但它更容易看出您指的是字符的大小而不是文字1. – fuz 2013-02-20 10:22:07

回答

4

您不爲dynArr分配內存。無論是在堆中分配內存:

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

或者它分配在堆棧上,並使用地址的運營商把它作爲一個指針init功能:

dynArr a1; 

/* ... */ 

init(&a1, strlen(line)); 
+0

非常感謝...現在可以工作。 – juice 2013-02-20 07:48:09