如何手动分配内存

时间:2019-10-20 05:02:49

标签: c pointers

当我学习指针时,我有一个想法可以更好地了解 内存分配,所以我尝试手动将内存分配给指针, 但这没用。 有人可以解释更多吗?我什么都没找到。

我写了一些C代码,该代码分配了一个指针并打印位置

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *test;
    test = malloc(sizeof(char*));
    test[0] = 't';
    test[1] = 'e';
    test[2] = 's';
    test[3] = 't';
    test[4] = ' ';
    test[5] = ' ';
    test[6] = ' ';
    test[7] = ' ';
    printf("%p\n",test);
    printf("%p\n",test[0]);
    printf("%p\n",test[1]);
    printf("%p\n",test[2]);
    printf("%p\n",test[3]);
    printf("%p\n",test[4]);
    printf("%p\n",test[5]);
    printf("%p\n",test[6]);
    printf("%p\n",test[7]);
}

当我执行它时,输出是这个 在执行上只有第一行发生改变

0x561160
0x74
0x65
0x73
0x74
0x20
0x20
0x20
0x20

所以写其他

#include <stdio.h>
#include <stdlib.h>
int main()
{
        char *memory;
        memory = malloc(1);
//        memory = 0x561160;
        memory[0] = 0x74;
        memory[1] = 0x65;
        memory[2] = 0x73;
        memory[3] = 0x74;
        memory[4] = 0x72;
        memory[5] = 0x20;
        memory[6] = 0x20;
        memory[7] = 0x20;
        printf("%s",memory);
}

如果我分配了内存,程序将获得输出“ test”(很好)

但是,如果我使用注释的内存位置(从其他程序获得的位置),则该程序崩溃,有人可以告诉我,如果我不释放另一个指针,为什么该程序崩溃?

1 个答案:

答案 0 :(得分:1)

在现代操作系统上运行程序(进程)时,它将获得自己的地址空间。该地址空间在整个过程中都存在,但是在过程结束时会清除。此外,不同进程的地址空间是完全相互隔离的。

有了这个,您不能简单地获取程序打印的指针,然后在其他进程中使用它。

在此处了解更多信息:https://en.wikipedia.org/wiki/Process_management_(computing)

另一个问题是,您的两个示例都没有为memory分配足够的存储空间。