错误:一元'*'的类型参数无效(具有'long int')

时间:2019-07-12 14:34:32

标签: c stack

执行函数后,我需要读取堆栈的内容

因为我知道堆栈中的最高和最低地址,所以我尝试读取堆栈中的内容 我在代码中创建了这个函数

int pile_start =0xd0000890;
int size =0x1890;

void read_stack()

ptrdiff_t i;
    for ( i = pile_start; i < size; i++)        {
        printf("pile = %d", *(pile_start+i));     // error
    }

但是我有这个错误:

 error: invalid type argument of unary '*' (have 'long int')

可能是我读取堆栈内容不正确的方式 我需要你的帮助

2 个答案:

答案 0 :(得分:0)

错误消息很清楚。您正在尝试将间接运算符应用于long int类型的对象

printf("pile = %d", *(pile_start+i));
                    ^^^^^^^^^^^^^^^

也许你是说

printf("pile = %ld", (pile_start+i));

或者您需要将变量pile_start强制转换为指针,例如

printf("pile = %d", *( unsigned char * )(pile_start+i));

答案 1 :(得分:0)

printf("pile = %d", *(pile_start+i));

这里pile_start是一个数字-int,我假设i是一个数字,并且您在for循环中将其用作索引。 (pile_start+1)的数据类型为int,并且int的值无效。

要使用“ *”,您需要有一个指针。因此,首先将(pile_start+1)转换为指针,然后在该位置读取值。

如果您将代码更改为

printf("pile = %d", *(uint32_t*)(pile_start+i));

它应该在该地址显示内容。