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)
它没有给我一个分段错误.
它应该不会给出分段错误,因为我试图访问超出为阵列分配的内存.
内存不是"分配给这个指针",它被分配,然后你得到一个指向内存的指针.
这个:
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.