[malloc与sizeof(data type)乘以数字而不乘以数字时,malloc的区别是什么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[malloc与sizeof(data type)乘以数字而不乘以数字时,malloc的区别是什么相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
int main() {
char *buffer = "hello";
char *words = malloc(6 * sizeof(char));
int count = 0;
while (count < 10) {
*(words+count) = buffer[count];
count++;
}
printf("%s
", words);
return 0;
}
我不知道将数字乘以sizeof(char)
有什么区别。
例如,如果我删除6(只是char *words=malloc(sizeof(char));
)该代码也有效。
我以为它在运行时不会起作用。
[malloc(6 * sizeof(char))
为6个字符的数组分配足够的内存。
如果不乘以6,则只能获得1个字符的足够内存。尝试访问*words
以外的任何其他字符将导致未定义的行为。
count
大于5
时,您的代码会导致未定义的行为。它是在words
的末尾写,在buffer
的末尾读;这两个都是不确定的。
未定义的行为并不总是会产生错误消息,请参见Why don't I get a segmentation fault when I write beyond the end of an array?。因此您的代码似乎可以正常运行,但是仍然是错误的,将来可能会失败。
在您的情况下,这没有太大意义,因为sizeof(char)
始终为1
。
但是考虑如何计算存储类型为n
的my_t
结构所需的字节数。
typedef struct
{
int a;
double b;
float x[10];
void *y[30];
float (*c[12])(int);
/* more and more */
}my_t;
my_t *foo(size_t n)
{
return malloc(n * sizeof(my_t));
}
如果不使用struct
,很难猜测sizeof
的大小。
以上是关于[malloc与sizeof(data type)乘以数字而不乘以数字时,malloc的区别是什么的主要内容,如果未能解决你的问题,请参考以下文章
t=(char*)malloc(n*sizeof(char))的含义?
使用 Malloc,sizeof(int) * numRows 和 sizeof(int * [numRows]) 之间的区别