2013-02-20 3 views
0

은 우리가 문자열 예를 들어stackInit 기능이 독방 감금 오류있는 내가이

에서 읽을 수있는 구조와 현재의 할당을 사용하여 새로 온 이유를 이해하고 있지 않다 : "{{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; 
} 
+0

[캐스팅하지 마십시오 C에서 malloc()의 반환 값] (http://stackoverflow.com/a/605858/28169). 또한,'sizeof (char)'는 꽤 의미가 없다; 그것은 항상 1이 될 것입니다. – unwind

+0

@unwind 저는 sizeof (char)가 무의미하다는 것에 매우 동의하지 않습니다. 항상 0이지만 문자 1보다 숯의 크기를 나타내는 것을 쉽게 볼 수 있습니다. – fuz

답변

4

dynArr에 메모리를 할당하지 않았습니다.

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

을 또는 스택에 할당하고 init 함수에 대한 포인터로 전달하는 주소의 연산자를 사용 : 어느 힙에 메모리를 할당

dynArr a1; 

/* ... */ 

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

감사합니다 ... 지금 작동합니다. – juice