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
。
您的代码调用未定义的行为(最糟糕的形式之一,覆盖内存,这是软件中许多漏洞的根本原因)。
“未定义的行为”意味着任何事情都有可能发生。绝对是任何东西。你在问为什么当你的代码改变时结果会改变:因为你有未定义的行为,任何事情都可能发生。当您看不到任何发生不同事情的充分理由时,可能会发生不同的事情。无论您假设什么,如果您的代码有未定义的行为,那您就错了。
我有一个非常简单的程序来演示在 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
。
您的代码调用未定义的行为(最糟糕的形式之一,覆盖内存,这是软件中许多漏洞的根本原因)。
“未定义的行为”意味着任何事情都有可能发生。绝对是任何东西。你在问为什么当你的代码改变时结果会改变:因为你有未定义的行为,任何事情都可能发生。当您看不到任何发生不同事情的充分理由时,可能会发生不同的事情。无论您假设什么,如果您的代码有未定义的行为,那您就错了。