c - 进程已完成,退出代码 (0xC0000005)

标签 c arrays memory-management char

我收到以下错误:

进程已完成,退出代码-1073741819 (0xC0000005)

我试图循环遍历字符数组中的每个字符并添加到另一个字符数组,这是我的代码:

下面的

c_data_ptr是以下字符串:

id、酒店名称、度假村名称、目的地名称 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.");
    }
}

最佳答案

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

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。

关于c - 进程已完成,退出代码 (0xC0000005),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533094/

相关文章:

php - 如何在数据库中存储数组(PHP/MySQL)?

arrays - Julia 中的元素明智减法

ios - ARC 和非 ARC 框架之间的内存管理

c - LFSR 未按预期工作

c++ - 当 C 和 C++ 中严格要求内存释放时?

c - OpenGL 三角形未显示

c - goto后栈的状态

javascript - 如何在 JavaScript 中合并 2 个独立数组中的项目值?

linux - 虚拟连续与物理连续内存

ios - RxSwift 绑定(bind)操作保留周期