c-将内存分配给用于写入的字符指针



因此,我试图通过在要写入的函数中分配内存来写入main函数中声明的缓冲区,我注意到通过传递一个char指针,内存被分配,但只能在本地使用,而通过一个指向char指针的指针,分配的内存是";可见";即使在CCD_ 2函数内部也是如此。

这是我将堆中的内存分配给两个指针的代码:

#include <stdlib.h>
#include <stdio.h>
void AllocateMemoryToPtr(char* ptr)
{
if (!(ptr = malloc(32)))
exit(1);
}
void AllocateMemoryToDoublePtr(char** ptr)
{
if (!(*ptr = malloc(32))) 
exit(1);
}
int __cdecl main(void)
{
char* Ptr = NULL;
char* DoublePtr = NULL;

printf("n");
printf("PtrttADDRESSttBEFOREtmalloct-> %pn", Ptr);
printf("PtrttVALUEttBEFOREtmalloct-> %sn", Ptr);
printf("n");
printf("DoublePtrtADDRESSttBEFOREtmalloct-> %pn", DoublePtr);
printf("DoublePtrtVALUEttBEFOREtmalloct-> %sn", DoublePtr);
printf("n");
AllocateMemoryToPtr(Ptr);
AllocateMemoryToDoublePtr(&DoublePtr);
printf("n");
printf("PtrttADDRESSttAFTERtmalloct-> %pn", Ptr);
printf("PtrttVALUEttAFTERtmalloct-> %sn", Ptr);
printf("n");
printf("DoublePtrtADDRESSttAFTERtmalloct-> %pn", DoublePtr);
printf("DoublePtrtVALUEttAFTERtmalloct-> %sn", DoublePtr);
printf("n");
return 0;
}

有人能澄清我关于如何使用指针在外部缓冲区中写入的想法吗?

C是按值传递的。也就是说,函数参数就像函数的局部变量,修改它们并不能修改原来的。要实现引用传递,您需要传递一个指向原始文件的指针。


void AllocateMemoryToPtr(char* ptr)
{
if (!(ptr = malloc(32)))
exit(1);
}

char*是指向字符缓冲区的指针,允许您修改缓冲区,但不能修改原始指针指向的内容

所以这里有内存泄漏,函数返回时ptr丢失。


void AllocateMemoryToDoublePtr(char** ptr)
{
if (!(*ptr = malloc(32))) 
exit(1);
}

char**是指针对指针,允许您修改原始指针(当然还有它指向的缓冲区(。

所以这就是你想要的。

另一个选项是返回分配块的地址,如下所示:

char * AllocateMemoryToPtr(int size)
{
if (!(char *ptr = malloc(size)))
exit(1);
return ptr;
}

main:中

int size = 32;
char *ptr = AllocateMemoryToPtr(size);

最新更新