【问题标题】:Process finished with exit code (0xC0000005)进程以退出代码 (0xC0000005) 结束
【发布时间】:2017-11-28 13:43:47
【问题描述】:

我收到以下错误:

进程结束,退出代码-1073741819 (0xC0000005)

我正在尝试遍历 char 数组中的每个字符并添加到另一个 char 数组中,这是我的代码:

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.");
    }
}

【问题讨论】:

  • 我认为你需要read more about the calloc function。你没有正确使用它。
  • 它应该是realloc(NULL, SYS_MXL_HEADER_NAME * sizeof(char) + 1);,但这也没有多大意义。
  • @Someprogrammerdude 我是 C 的新手,正在努力学习它并来自 PHP 背景 :)
  • @SouravGhosh 以这种方式使用realloc 是有道理的,因为它与普通的malloc 调用相同。我见过几次这样的,但它主要用于在循环中重新分配时使用,并且将被重新分配的指针初始化为空指针。
  • = {"\0"}; 是指= {'\0'}; 吗?另请注意,sizeof(char) 定义为 1。

标签: c arrays memory-management char


【解决方案1】:

感谢您的帮助,我想我已经解决了这个问题,我不再收到错误,有人可以验证我下面的代码吗?

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。

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2014-01-04
    • 2017-11-03
    • 2017-01-19
    • 2020-01-04
    相关资源
    最近更新 更多