为什么没有这行代码:char * n = malloc(sizeof(int));抛出错误?

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

在C中,我的理解是char类型是1个字节,而int是4个字节。我想知道为什么以下代码不会引发错误:

char *n = malloc(sizeof(int));

n旨在指向一块1字节的内存,但指向一块4字节的内存,这不是引起某种类型的问题吗?

((如果这是一个简单的问题,并且由于我的某些术语不够成熟,我深表歉意)。

谢谢!

c memory-management
3个回答
1
投票

n旨在指向一块1字节的内存

不是,它也可能指向更多,而不是分配的内存的一个字节。

例如参见:

char *str;
str = malloc(100);

sizeof(int) > sizeof(char)起,即使结果打算用作malloc(sizeof(int))指针,也绝对可以执行char *。从技术上讲,它是[[没错,因为sizeof的计算结果只是大于1的大小,但这肯定是错误的代码。


1
投票
为什么不使用代码行:char * n = malloc(sizeof(int));抛出错误?

因为C编程语言没有static type checking,并且允许编写不是“类型安全”的代码。 malloc公开的接口返回一个指针,该指针只是可以以任何可能的方式使用的抽象void*指针。

C语言允许在任何两种类型之间强制转换值,并且没有一种静态的赋值类型检查。您可以随意犯任何错误,并且编译器没有义务以任何方式报告错误。我们C程序员负责编写适当的C代码,这些代码易于阅读,理解,正确,并且最重要的是,遵循语言规则,以免发生“未定义的行为”。


0
投票
使用malloc函数,我们可以分配一个内存块。因此,它可以指向一个内存字节或多个内存字节。 char *ptr可以指向字符变量,也可以像char ptr[n]一样起作用,其中n是字符数组的大小。还请记住,malloc返回一个void pointer,因此为避免程序中出现任何类型的错误,请用以下代码替换代码:-
© www.soinside.com 2019 - 2024. All rights reserved.