【问题标题】:I just don't understand this pointer case [closed]我只是不明白这个指针案例[关闭]
【发布时间】:2018-08-19 05:08:44
【问题描述】:

这是我的代码:

int *p;
p=4;
printf("p is %p\n",p);
free(p);
//need p=NULL but I don't
int *q;
q=5:
printf("q is %i",*q);

然后错误来了。 我只是需要解释一下。

【问题讨论】:

  • 忽略错字(Int 应该是int——大小写很重要),p 是一个指向整数的指针。然后你给它分配地址 4。但是 4 不是 int 的地址,也不是你分配的,所以你不能释放它。

标签: c pointers


【解决方案1】:
int *p;

是一个指向 int 的指针。

p = 4;

使其指向地址0x4

free(p);

尝试释放地址 0x4

基本上,您正在尝试释放无法释放的资源。

int *q;
q = 5;

将 q 指向地址 `0x5;

*q;

0x5 地址读取,这很可能会崩溃。 (这个地址也没有对齐)。

指针不是整数...您编写的程序显示对指针是什么以及为什么/如何使用它们缺乏了解。

【讨论】:

  • 现在我明白了。非常感谢
【解决方案2】:
Int *p; // You had better use int* p = NULL; we don't like wild pointers
//p = new int;
p=4; // I guess you want put the value of 4 to a variable, so *p = 4;
printf("p is %p\n",p);//    printf("p is %d\n",*p);
free(p);//just correct in theory, no one can tell what happens in reality.
/* 
if ( NULL != p )
{
    delete p;
    p = NULL;
}
*/

【讨论】:

  • 请注意,如果p == NULL*p = 4; 不会有太大的改进;通过空指针写入代码可能会崩溃。在访问 q 时,您也没有直接解决崩溃问题——这部分代码片段也存在多个问题。
  • 我做的只是评论,告诉作者。你太紧张了。
猜你喜欢
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
相关资源
最近更新 更多