malloc函数内存分配大小问题

Malloc Function Memory Allocation Size Problem

我有一个非常简单的程序来演示在 C 中使用 malloc 函数。我分配了只存储一个整数所需的大小,并将返回的指针存储在变量 ptr 中。

问题是,虽然我已经为一个整数(在我的 PC 中为 4 个字节)设置了 malloc 大小,但当 printf("%u\n", ptr + j); 未注释。但是当 printf("%u\n", ptr + j); 注释 时,它会报错。也许它在尝试访问 printf 或其他内容时创建了一些相邻的内存块。

我认为这与是否使用内存堆有关,但作为这方面的初学者,我想对此进行解释。

谢谢。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    int x = 95;

    ptr = (int *) malloc(sizeof(int));
    for (int j = 0; j < x; ++j) {
        *(ptr + j) = 3;
        //printf("%u\n", ptr + j);
    }

    for (int i = 0; i < x; ++i) {
        printf("%d\n", *(ptr + i));
    }

    return 0;
}

在您的示例中,您为一个整数分配了内存,并且您正试图写入 95 个整数。你应该总是分配足够的 space。在这种情况下,你应该做一个 malloc(sizeof(int) * x); 然后用你的数字填写 space :)

如果您尝试打印地址,请将打印语句中的 %u 更改为 %p

您的代码调用未定义的行为(最糟糕的形式之一,覆盖内存,这是软件中许多漏洞的根本原因)。

“未定义的行为”意味着任何事情都有可能发生。绝对是任何东西。你在问为什么当你的代码改变时结果会改变:因为你有未定义的行为,任何事情都可能发生。当您看不到任何发生不同事情的充分理由时,可能会发生不同的事情。无论您假设什么,如果您的代码有未定义的行为,那您就错了。