[英]How can I get a stack trace from a core dump generated via Windows MiniDump calls?
[英]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.