将内存分配给C中的指针 - 递增和递减时出错

时间:2015-07-13 17:22:26

标签: c memory

int main() {    
    int *p;  
    p = (int*)malloc(sizeof(int));
    p++;
    printf("%d",*p);
    p--;free(p);
    return 0;
}

你能解释为什么这个程序在执行free(t)时会产生错误吗? 我注意到程序在printf("%d",*t);缺失时没有出错。

2 个答案:

答案 0 :(得分:0)

首先声明t;

并且不要free(t);它是一个整数变量。 free(p);因为它是分配内存的指针。

或者 -

您可能只是在程序中写了t而不是p,因为您没有声明t

修改

但是,如果您还使用t

p进行评论
printf("%d",*p);

会给出未定义的行为,因为在你的程序中你没有initialized p

首先初始化p。

答案 1 :(得分:0)

取消引用指向未分配的内存块的指针意味着未定义的行为。 然而

printf("%d",*t);

可能有效,甚至可以这样做

t--;free(t);

可能有效,但会导致另一堆可能的问题,不允许删除。