有人能解释这两个alloc之间的区别吗?为什么是好的和坏的?

有人能解释这两个alloc之间的区别吗?为什么是好的和坏的?,c,memory,C,Memory,有人能解释这两个alloc之间的区别吗?为什么是好的和坏的?在每一个坏的和好的情况下会发生什么 错误分配 良好的alloc 坏的是,在第一种情况下,指针arr通过值传递,它的值在函数中被修改,返回值时被“遗忘”。在第二种代码中,指针的引用被传递,因此在函数外时,赋值被保留。坏的是,在第一种情况下,指针arr是按值传递的,它的值在函数中被修改,返回值时被“遗忘”。在第二种代码中,指针的引用被传递,因此在函数外时,赋值被保留。坏的是,在第一种情况下,指针arr是按值传递的,它的值在函数中被修改,返回

有人能解释这两个alloc之间的区别吗?为什么是好的和坏的?在每一个坏的和好的情况下会发生什么

错误分配

良好的alloc


坏的是,在第一种情况下,指针
arr
通过值传递,它的值在函数中被修改,返回值时被“遗忘”。在第二种代码中,指针的引用被传递,因此在函数外时,赋值被保留。

坏的是,在第一种情况下,指针
arr
是按值传递的,它的值在函数中被修改,返回值时被“遗忘”。在第二种代码中,指针的引用被传递,因此在函数外时,赋值被保留。

坏的是,在第一种情况下,指针
arr
是按值传递的,它的值在函数中被修改,返回值时被“遗忘”。在第二种代码中,指针的引用被传递,因此在函数外时,赋值被保留。

坏的是,在第一种情况下,指针
arr
是按值传递的,它的值在函数中被修改,返回值时被“遗忘”。在第二个代码中,对指针的引用被传递,因此在函数外时分配的值被保留。

在“坏”示例中,您实际上是在丢弃malloc的结果,因为“str”参数是passe dby value,在调用后将保留其空值。在第二种情况下,函数接收到指向“str”的指针,因此它能够操作“str”并在其中保留正确的值。

在“坏”示例中,您实际上是在丢弃malloc的结果,因为“str”参数是passe dby value,在调用后将保留其NULL值。在第二种情况下,函数接收到指向“str”的指针,因此它能够操作“str”并在其中保留正确的值。

在“坏”示例中,您实际上是在丢弃malloc的结果,因为“str”参数是passe dby value,在调用后将保留其NULL值。在第二种情况下,函数接收到指向“str”的指针,因此它能够操作“str”并在其中保留正确的值。

在“坏”示例中,您实际上是在丢弃malloc的结果,因为“str”参数是passe dby value,在调用后将保留其NULL值。在第二种情况下,函数接收到指向“str”的指针,因此它能够操作“str”并在其中保留正确的值。

由于其他人已经回答了您的问题,我添加了一个替代选项:

void get_memory(char **arr, size_t length){
   if((*arr = malloc(length)) == NULL && 0 != length)
   {
       puts("Not enough memory. Sorry.\n");
       exit(-1);
   }
}
推理:
长度
不得为负。当它是
0
时,
malloc
的结果可以是
NULL

malloc
返回
void*
,它在C中自动转换为适当的指针类型


根据后来的C标准,
sizeof(char)
为1。

由于其他人已经回答了您的问题,我添加了一个替代选项:

void get_memory(char **arr, size_t length){
   if((*arr = malloc(length)) == NULL && 0 != length)
   {
       puts("Not enough memory. Sorry.\n");
       exit(-1);
   }
}
推理:
长度
不得为负。当它是
0
时,
malloc
的结果可以是
NULL

malloc
返回
void*
,它在C中自动转换为适当的指针类型


根据后来的C标准,
sizeof(char)
为1。

由于其他人已经回答了您的问题,我添加了一个替代选项:

void get_memory(char **arr, size_t length){
   if((*arr = malloc(length)) == NULL && 0 != length)
   {
       puts("Not enough memory. Sorry.\n");
       exit(-1);
   }
}
推理:
长度
不得为负。当它是
0
时,
malloc
的结果可以是
NULL

malloc
返回
void*
,它在C中自动转换为适当的指针类型


根据后来的C标准,
sizeof(char)
为1。

由于其他人已经回答了您的问题,我添加了一个替代选项:

void get_memory(char **arr, size_t length){
   if((*arr = malloc(length)) == NULL && 0 != length)
   {
       puts("Not enough memory. Sorry.\n");
       exit(-1);
   }
}
推理:
长度
不得为负。当它是
0
时,
malloc
的结果可以是
NULL

malloc
返回
void*
,它在C中自动转换为适当的指针类型


<> >以后的C标准,<代码> siZeof(char)< /C> > 1。< /p>为什么标记C和C++?C -MaloC C++ New第一个指针指向一个本地,所以调用方不会看到它首先是内存泄漏。STR仍然是空的StrucPbTW -哪里是丑陋的?为什么标记C和C++?C -MaloC C++ New第一个指针指向一个本地,所以调用方不会看到它首先是内存泄漏。STR仍然是空的StrucPbTW -哪里是丑陋的?为什么标记C和C++?C -MaloC C++ New第一个指针指向一个本地,所以调用方不会看到它首先是内存泄漏。STR仍然是空的StrucPbTW -哪里是丑陋的?为什么标记C和C++?C -MaloC C++ New第一个指针指向一个本地,所以调用方不会看到它首先是内存泄漏。strcpyBTW的Str仍然为空-丑陋的在哪里?