指针问题
为什么这样会向0地址写入东西?初始化指针的话不都是写成*p=0吗?这时候为什么不是向0地址写入? 死循环,每执行一次,就会动态申请一次空间,所以最终会因为没有空间而报错
*p=0,是给分配的空间进行赋值,不是向0地址写入 sunrise085 发表于 2020-10-21 22:02
死循环,每执行一次,就会动态申请一次空间,所以最终会因为没有空间而报错
*p=0,是给分配的空间进行赋值 ...
不好意思,我截图没截全,这题答案是B sunrise085 发表于 2020-10-21 22:02
死循环,每执行一次,就会动态申请一次空间,所以最终会因为没有空间而报错
*p=0,是给分配的空间进行赋值 ...
而且我试了试,不知道为啥程序不会退出 不是选D么,malloc返回的是不是void *的 . 塔利班 发表于 2020-10-21 22:48
不是选D么,malloc返回的是不是void *的
我用的dev-c++编译可以过 马老师 发表于 2020-10-21 23:09
我用的dev-c++编译可以过
朋友,能不能将全部的代码发出来,我们试着运行一下,也好学习研究一下,好吗? 乐乐学编程 发表于 2020-10-21 23:17
朋友,能不能将全部的代码发出来,我们试着运行一下,也好学习研究一下,好吗?
#include<stdio.h>
#include<stdlib.h>
int main(){
char *p;
while(1){
p = malloc(1);
*p=0;
}
return 0;
} 我用的gcc调试首先,void* 赋值给 char*编译报错无法运行,然后加上强制类型转换之后,直接运行到死机,我可以很负责任的告诉你程序并没有退出{:9_229:} 支持 2 楼大佬 说的,死循环,最后会因为没有空间报错或直接死掉,*p = 0是写入数据 0 楼主啊,这道题选D 应该不存在分配不了地址的问题吧,操作系统会有保护的 sunrise085 发表于 2020-10-21 22:02
死循环,每执行一次,就会动态申请一次空间,所以最终会因为没有空间而报错
*p=0,是给分配的空间进行赋值 ...
有的 malloc 分配失败会返回 NULL,导致0地址写入{:10_277:} 塔利班 发表于 2020-10-21 22:48
不是选D么,malloc返回的是不是void *的
有的编译器支持这种隐式转换 yuxijian2020 发表于 2020-10-22 10:17
我用的gcc调试首先,void* 赋值给 char*编译报错无法运行,然后加上强制类型转换之后,直接运行到死机,我可 ...
我把后边的1改成了很大的数,等个一两秒程序就结束了 资治通鉴 发表于 2020-10-22 11:36
楼主啊,这道题选D
编译通过了,后面的数变的很大时,他会退出程序。
然后我把*p=0去掉之后,程序也不会退出了,会一直运行 马老师 发表于 2020-10-22 10:06
#include
#include
int main(){
为了验证,我加了两条语句:
#include<stdio.h>
#include<stdlib.h>
int main(){
char *p;
while(1){
p = malloc(1);
*p=0;
printf("%p\n",p);
}
printf("程序死循环了吗?");
return 0;
}
证明答案 A、D是肯定不正确的,正确答案应该在B、C两个之间。启动 PhotoShop 软件对下面的截图进行编辑,并没有卡的感觉,我的系统:Windows XP、4G内存、编程软件DEV_C++5.11,截止点击下面的“参与/回复主题”,我运行了二十分钟,并程序仍在正常运行,看图:
??楼楼啊 楼主,p = malloc(1)
这句话左边的值和右边值,类型不一样呢?
页:
[1]
2