C语言类型定义导致指针为NULL

destory27 2017-11-19 11:00:13




当 choose 为 int 类型是 P_page != NULL

当 choose 为 char 类型是 P_page == NULL

P_page内容被覆盖了?
...全文
334 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-11-20
  • 打赏
  • 举报
回复
引用 4 楼 destory27 的回复:
[quote=引用 3 楼 cfjtaishan 的回复:] [quote=引用 2 楼 lin5161678 的回复:] unsigned char 1个字节 假设 int 4个字节 scanf %d 会向参数指定的内存写入4个字节的数据 但chosse只有1个字节 所以有3个字节是越界写入 这里刚刚好写到了 P_page的内存里面了 修改了P_page的数据 所以 scanf 格式控制字符 要和参数的类型 对应 所以 不要出现数组越界的操作
有可能是这种情况导致的。 建议将choose定义成unsigned int或int类型。对应的scanf输入格式%u和%d 主要是%d是4个字节,unsigned char是一个字节;[/quote] 我用unsigned char 主要是 我要存的值很小,1个字节够了[/quote] 如果内存不紧张,即使是用一个字节,那么定义成int类型又何妨?
lin5161678 2017-11-20
  • 打赏
  • 举报
回复
unsigned char 1个字节 假设 int 4个字节 scanf %d 会向参数指定的内存写入4个字节的数据 但chosse只有1个字节 所以有3个字节是越界写入 这里刚刚好写到了 P_page的内存里面了 修改了P_page的数据 所以 scanf 格式控制字符 要和参数的类型 对应 所以 不要出现数组越界的操作
paschen 2017-11-20
  • 打赏
  • 举报
回复
unsigned类型不能用%d去接收输入
destory27 2017-11-20
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
[quote=引用 2 楼 lin5161678 的回复:] unsigned char 1个字节 假设 int 4个字节 scanf %d 会向参数指定的内存写入4个字节的数据 但chosse只有1个字节 所以有3个字节是越界写入 这里刚刚好写到了 P_page的内存里面了 修改了P_page的数据 所以 scanf 格式控制字符 要和参数的类型 对应 所以 不要出现数组越界的操作
有可能是这种情况导致的。 建议将choose定义成unsigned int或int类型。对应的scanf输入格式%u和%d 主要是%d是4个字节,unsigned char是一个字节;[/quote] 我用unsigned char 主要是 我要存的值很小,1个字节够了
自信男孩 2017-11-20
  • 打赏
  • 举报
回复
引用 2 楼 lin5161678 的回复:
unsigned char 1个字节 假设 int 4个字节 scanf %d 会向参数指定的内存写入4个字节的数据 但chosse只有1个字节 所以有3个字节是越界写入 这里刚刚好写到了 P_page的内存里面了 修改了P_page的数据 所以 scanf 格式控制字符 要和参数的类型 对应 所以 不要出现数组越界的操作
有可能是这种情况导致的。 建议将choose定义成unsigned int或int类型。对应的scanf输入格式%u和%d 主要是%d是4个字节,unsigned char是一个字节;

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧