如何解决我的代码的 ptr=&n 和 ptr = (int*)malloc(4) 之间有什么区别?
考虑这个示例代码:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int i=0,n;
int*ptr; /*this program attempts to prompt user to keep entering integer
values untill he gives 9 as input */
//ptr=&n;
ptr = (int*)malloc(4);
for(i=0;;i++)
{
scanf("%d",ptr+i);
if(*(ptr+i)==9)
return 0;
}
return 0;
}
上面的代码通过提示用户一直输入整数直到他输入 9 ,效果很好。
但是如果我写
ptr=&n;
代替
ptr = (int*)malloc(4);
它不能正常工作。
请说明为什么一个有效而另一个无效,因为每次 ptr
都是一个指针,用于存储存储整数值的内存块的地址。
解决方法
使用 ptr=&n;
获取现有变量的地址。
您可以直接访问该变量,也可以通过指针访问它。
使用 ptr = (int*)malloc(4);
获取新分配的内存片的地址。假设 sizeof(int)==4
在您的环境中。
您只能通过指针访问它。
在这两种情况下,您的循环从第二次交互(当 >0
时)访问您不允许访问的内存。
如果您观察到差异,例如代码似乎适用于第二个版本,但不适用于第一个版本,那么解释是您是幸运还是不幸,这取决于您想要注意错误的方式和时间的哲学。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。