Gdb 软阵列打印阵列
#include <stdio.h>
#include <malloc.h>
typedef struct _soft_array
{
    int len;
    int array[];//int array[0];
}SoftArray;

int main()
{  
    int i = 0;
    SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);

    sa->len = 10;

    for(i=0; i<sa->len; i++)
    {
        sa->array[i] = i + 1;
    }

    for(i=0; i<sa->len; i++)
    {
        printf("%d\n", sa->array[i]);   
    }

    free(sa);

    return 0;
}

I use gdb to print the array of sa->array,then something confuse me:

(gdb) p sa->array
$1 = 0x602014
(gdb) p *sa->array@10
$2 = {[0] = 1, [1] = 2, [2] = 3, [3] = 4, [4] = 5, [5] = 6, [6] = 7, [7] = 8, [8] = 9, [9] = 10}
(gdb) p sizeof(int)
$3 = 4
(gdb) p *(char *)0x602014@40
$4 = "\001\000\000\000\002\000\000\000\003\000\000\000\004\000\000\000\005\000\000\000\006\000\000\000\a\000\000\000\b\000\000\000\t\000\000\000\n\000\000"
(gdb)

the first method went well (I add set print array-indexes on in .gdbinit).

sizeof(int)==4,then I use p *(char *)0x602014@40,due to my computer is little-endian,so 1 display with 01 00 00 00.

When display 7,the output become a?

How does that happen or I miss something ?

转载于:https://stackoverflow.com/questions/53250451/gdb-print-array-of-soft-array

weixin_41568183
零零乙 Are you perhaps debugging an optimized build? If so, the debugging experience is not reliable.
大约一年之前 回复

1个回答

Note that the output isn't the character 'a', but '\a'. That is the alert character, in ASCII. Just like you later get '\b' and '\t' and '\n' for the ASCII equivalents of those characters.

This character escape reference contains a list of all standard C escape characters, together with their ASCII encoded values.

csdnceshi60
℡Wang Yan not familiar with Escape sequences,reading the article learn much.command p *(char *)0x602014@40 just print every byte in octal,this is unusual for me.
大约一年之前 回复
csdnceshi60
℡Wang Yan thanks,got it .
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问