2017-11-28 1 views
1

나는 다음과 같은 오류가 무엇입니까 완료 : 종료 코드 완료프로세스 종료 코드 (가 0xc0000005)

프로세스 -1073741819 (0xC0000005)

내가 문자 배열에서 각 문자를 통해 루프를 시도하고 다른 문자 배열에 추가하고 아래

c_data_ptr

다음의 문자열입니다 : 여기에 내 코드,

ID, HOTEL_NAME, resort_name이 DESTINATION_NAME 1 내 호텔, 리조트, 대상

void get_collection_headers(char *c_data_ptr) { 

    printf("[INFO] Getting headers for this collection.\n"); 

    // Set char array of char array for headers 
    char headers[SYS_MXL_HEADERS][SYS_MXL_HEADER_NAME] = {"\0"}; 

    // Current working "header name" 
    char *header_name; 
    header_name = (char*)calloc(0,SYS_MXL_HEADER_NAME * sizeof(char) + 1); 

    if(header_name != NULL) { 
     // Iterate over the data to get the first line only 
     for (char c = *c_data_ptr; c; c=*++c_data_ptr) { 

      // Check for a newline 
      if (c == '\n') { 
       //free(header_name); 
       printf("ENDOFLINE\n"); 
       break; 
      } 

      if(c != '\0') { 
       printf("%c", c); 
      } 

      // Char = , 
      if (c == ',') { 
       memset(header_name,0,SYS_MXL_HEADER_NAME * sizeof(char) + 1); 
      } else { 

       // Add character to header name 
       strcat(header_name, &c); 

       printf("-> HeaderName: %s\n", header_name); 
      } 
     } 
    } else { 
     printf("[INFO] Failed to allocate memory."); 
    } 
} 
+2

필자는 [calloc 함수에 대해 더 자세히 읽어보십시오.] (http://en.cppreference.com/w/c/memory/calloc)라고 생각합니다. 올바르게 사용하고 있지 않습니다. –

+0

그것은'realloc (NULL, SYS_MXL_HEADER_NAME * sizeof (char) + 1); '이라고 생각되었지만, 역시 의미가 없습니다. –

+0

@Someprogrammerdude 나는 C를 배우려 고 노력 중이며 PHP 배경에서 오는 것을 배우려고합니다. –

답변

0

이 문제에 도움을 주셔서 감사합니다. 문제가 해결 된 것 같습니다. 더 이상 오류가 표시되지 않습니다. 누군가 내 코드를 확인할 수 있습니까?

HeaderStruct *get_collection_headers(char *c_data_ptr){ 

printf("[INFO] Getting headers for this collection.\n"); 

// Create a new struct 
HeaderStruct* c_header_structs = malloc(SYS_MXL_HEADERS * sizeof *c_header_structs); 

// Create a dynamic char array for headers 
char (*headers_ptr)[SYS_MXL_HEADER_NAME] = malloc(SYS_MXL_HEADERS * sizeof(char[SYS_MXL_HEADER_NAME])); 

// Set the headers index 
int headers_index = 0; 

// Current working "header name" 
char *header_name; 

// Set the bytes for header name 
size_t header_name_bytes = sizeof(char) * SYS_MXL_HEADER_NAME + 1; 

// Allocate some memory 
header_name = malloc(header_name_bytes); 

// Check if allocation of memory was successful 
if(header_name != NULL) { 

    // Give some blank values 
    memset(header_name, 0, header_name_bytes); 

    // Iterate over the data to get the first line only 
    int hi = 0; 
    for (char c = *c_data_ptr; c; c = *++c_data_ptr) { 

     // Check for a newline 
     if (c == '\n') { 

      // Add header_name to headers [position] 
      strcpy(headers_ptr[headers_index],header_name); 
      headers_index++; 

      break; 
     } 

     // Char = , 
     if (c == ',') { 

      // Add header_name to headers [position] 
      strcpy(headers_ptr[headers_index],header_name); 
      headers_index++; 

      // Reset header name 
      memset(header_name, 0, header_name_bytes); 

      // Reset starting index 
      hi = 0; 

     } else { 

      // Add character to header nam 
      header_name[hi] = c; 

      hi++; 

     } 

    } 

    // Free the memory 
    free(header_name); 

    // Loop over each header 
    printf("\nOur final headers are:\n\n"); 
    int j; 
    for(j = 0;j < headers_index;j++){ 

     c_header_structs[j].position = j; 
     c_header_structs[j].indexed = 0; 
     strcpy(c_header_structs[j].header_name,headers_ptr[j]); 

     printf("Header %i | Value: %s\n",j,headers_ptr[j]); 

    } 

    // Return 
    return c_header_structs; 

} 

} 

저는 이제 malloc과 memset을 사용하고 있습니다.

관련 문제