吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1199|回复: 3
收起左侧

[经验求助] 【C语言malloc函数申请空间的问题】

[复制链接]
倾情 发表于 2022-5-1 11:11
25吾爱币
使用malloc()函数申请一个1字节大小的空间为什么可以赋值超过128,一个字节8为不应该是0-127?难道是编译器自己增加了?求一位大佬解释下。

[C] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>#include <stdlib.h>
 
typedef struct stu{
    char *name;
    int num;
    int age;
    char group;
    float score;
} Lstu;
// 创建链表节点结构体
typedef struct node{
    Lstu *student;
    struct node *next;
}LNode, *LinkList;
 
 
int main(int argc, char *argv[]) {
    LNode *node1;
    int *a = NULL;
    a = (int*)malloc(1);
    printf("%d\n", a);
    printf("%d\n", *a);
    *a = 128889;
    printf("%d\n", *a);
    free(a);
    printf("%d\n", *a);
    free(a);
    printf("%d\n", a);
    return 0;
}

输出结果

10363888
10379552
128889
10383664

--------------------------------
Process exited after 3.188 seconds with return value 3221226356
请按任意键继续. . .

最佳答案

查看完整内容

因为申请1字节,实际可用的不是1字节,而是大于1字节的,可以使用malloc_usable_size(a)进行查看。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

北颃 发表于 2022-5-1 11:11
因为申请1字节,实际可用的不是1字节,而是大于1字节的,可以使用malloc_usable_size(a)进行查看。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
倾情 + 1 + 1 感谢大佬,不过目前测试malloc_usable_size linux下有此函数,但是看了些文.

查看全部评分

shanxiren 发表于 2022-5-1 14:02
malloc分配空间,是从程序的堆空间中分配,返回void类型 空间首地址,vc++6.0默认堆为1M,分配后不检查指针是否越界。
 楼主| 倾情 发表于 2022-5-1 17:26
shanxiren 发表于 2022-5-1 14:02
malloc分配空间,是从程序的堆空间中分配,返回void类型 空间首地址,vc++6.0默认堆为1M,分配后不检查指针 ...

第一个:没看懂。再说这个堆默认1M跟编辑器有关系,不应该是跟电脑本身和c编译器有关系?

第二个:
那么(int*)malloc(1);为什么我申请的1字节,去可以装下1万以上的数字
1个字节除去符号位,最大最小不就是-128到127?为啥上万了也可以装进去
返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-21 21:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表