C内存分配未按预期方式工作[重复]

问题描述 投票:0回答:1

我是处理指针和内存分配的新手。我不明白我在做什么错。这是我的代码:

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

int main() {
     int* i;
     printf("Size of i:%d\n",sizeof(i));
     i = malloc(5 * sizeof(int));
     printf("Size of i:%d\n",sizeof(i));
     i[100] = 3;
     printf("Impossible i:%d\n",i[100]);
}

我使用gcc file.c进行编译。据我了解,由于未分配i[100],因此不应该编译该文件。相反,我得到一个输出:

Size of i:8
Size of i:8
Impossible i:3

我在这里想念什么?忽略不可能的i,据我了解,前两行的输出应为

Size of i:8
Size of i:40
c arrays dynamic-memory-allocation
1个回答
2
投票

根据我的理解,由于未分配i [100],因此不应编译此文件。

仅是undefined behaviour即可越界访问。对于不确定的行为,编译器可能会或可能不会发出诊断信息。语言没有要求。

忽略不可能的我,据我所知前两行应该是

i的大小:8i:40的大小

与数组不同,指针上的sizeof运算符无法推断其指向的内存块的大小。总是要给出指针的大小,即sizeof(i) == sizeof (int*)

没有办法从指针中推论它;您只需要自己跟踪即可。一种方法是将5值存储在变量中,如果malloc成功,则知道存在5个int的空间。

© www.soinside.com 2019 - 2024. All rights reserved.