簡體   English   中英

如何在我的 C 代碼中跟蹤核心轉儲?

[英]How can I trace a core dump in my C code?

我有一個核心轉儲,我不知道為什么。 這是代碼:

#include <stdio.h>

int str_size(char *str) {
    int size = 0;

    for (int i = 0 ; str[i] != '\0' ; i++) {
    size++;
    }
    return (size);
}

int find_char(char c, char *str) {
    int place = 0;
    for (int i = 0 ; str[i] != '\0' ; i++) {
        if (c == str[i]) {
            place = i;
        }
    }
    return (place);
}

char *convert_dec_to_base(int n, char *base) {
    char n_based[64];
    char converted_b[64];

    for (int i = 0 ; n != 0 ; i++) {
        n_based[i] = base[n % str_size(base)];
        n /= str_size(base);
    }
    for (int i = 0 ; i < str_size(n_based) ; i++) {
        converted_b[str_size(n_based) - i - 1] = n_based[i];
    }
    return (converted_b);
}
int main(void) {
    printf("%s\n", convert_dec_to_base(32, "0123456789ABCDEF"));
    printf("%c\n", t[1]);
    return (0);
}

此代碼會將十進制 integer 轉換為給定的基數。 它將返回一個char* ,其中包含基本轉換后的 integer。

convert_b 是converted_b的局部變量,返回它會導致未定義的行為,您可以將其聲明為指針並分配 memory 以便能夠返回它:

#include <stdlib.h>
char* converted_b = malloc(64);

在這種情況下,程序將在那里結束,但在正常情況下,當您完成使用它時,您應該釋放之前分配的 memory:

char* str = convert_dec_to_base(32, "0123456789ABCDEF");
printf("%s\n",str);
free(str);

作為替代方案,正如評論部分中提到的@CraigEstey,您可以使用 static 存儲:

static char converted_b[64];

這將確保變量的生命周期與程序本身相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM