malloc中number对象的用法

Rag*_*hav -1 c c++ malloc memory-management new-operator

我是编程的新手,我正在努力理解它们之间的区别

A = (char * ) malloc(sizeof(char)*n);
Run Code Online (Sandbox Code Playgroud)

A = (char * ) malloc(sizeof(char)); 
Run Code Online (Sandbox Code Playgroud)

要么

A = new char [n];
Run Code Online (Sandbox Code Playgroud)

A = new char;
Run Code Online (Sandbox Code Playgroud)

当我没有指定特定数据类型的对象数时,编译器分配给此指针的默认内存是多少.

当我宣布时

A = new char [n];
cout << A[n+1];
Run Code Online (Sandbox Code Playgroud)

它没有给我一个分段错误.

它应该不会给出分段错误,因为我试图访问超出为阵列分配的内存.

unw*_*ind 5

内存不是"分配给这个指针",它被分配,然后你得到一个指向内存的指针.

这个:

char *a = malloc(sizeof(char) * n);
Run Code Online (Sandbox Code Playgroud)

是相同的

char *a = malloc(n);
Run Code Online (Sandbox Code Playgroud)

因为sizeof(char)总是 1.它们都为n值得数据的字符分配空间,并返回指向可以访问第一个字符(或NULL失败)的位置的指针.

此外,C中不需要演员表,你不应该有.

由于sizeof(char)是1,第二次调用相当于:

char *a = malloc(1);
Run Code Online (Sandbox Code Playgroud)

这意味着它分配一个大小为1的内存块.这当然不同于指向该内存块的指针(存储在指针变量中的值a).指针很可能大于1个字符,但这不会影响块的大小.

用于malloc()指定为其分配空间的字符数的参数.

我忽略了new用法,因为那是C++,问题标记为C.