2013-02-20 45 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