Hag*_*ble 61 c malloc pointers function
我需要帮助malloc() 内部另一个功能.
我正在向我的函数传递一个指针和大小main(),我想malloc()从被调用的函数内部动态地为该指针分配内存,但我看到的是......正在分配的内存是对于在我调用的函数内声明的指针,而不是指向内部的指针main().
我应该如何传递指向函数的指针并为被调用函数内部传递的指针分配内存?
我写了下面的代码,得到如下所示的输出.
资源:
int main()
{
unsigned char *input_image;
unsigned int bmp_image_size = 262144;
if(alloc_pixels(input_image, bmp_image_size)==NULL)
printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image));
else
printf("\nPoint3: Memory not allocated");
return 0;
}
signed char alloc_pixels(unsigned char *ptr, unsigned int size)
{
signed char status = NO_ERROR;
ptr = NULL;
ptr = (unsigned char*)malloc(size);
if(ptr== NULL)
{
status = ERROR;
free(ptr);
printf("\nERROR: Memory allocation did not complete successfully!");
}
printf("\nPoint1: Memory allocated: %d bytes",_msize(ptr));
return status;
}
Run Code Online (Sandbox Code Playgroud)
Point1: Memory allocated ptr: 262144 bytes
Point2: Memory allocated input_image: 0 bytes
Run Code Online (Sandbox Code Playgroud)
jam*_*lin 91
我应该如何传递指向函数的指针并为被调用函数内部传递的指针分配内存?
问问自己:如果你必须编写一个必须返回的函数int,你会怎么做?
你要么直接退货:
int foo(void)
{
return 42;
}
Run Code Online (Sandbox Code Playgroud)
或者通过添加间接级别(即使用int*替代int)来通过输出参数返回它:
void foo(int* out)
{
assert(out != NULL);
*out = 42;
}
Run Code Online (Sandbox Code Playgroud)
所以当你返回一个指针类型(T*)时,它是一样的:你要么直接返回指针类型:
T* foo(void)
{
T* p = malloc(...);
return p;
}
Run Code Online (Sandbox Code Playgroud)
或者你添加一个间接级别:
void foo(T** out)
{
assert(out != NULL);
*out = malloc(...);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*som 73
您需要将指针传递给指针作为函数的参数.
int main()
{
unsigned char *input_image;
unsigned int bmp_image_size = 262144;
if(alloc_pixels(&input_image, bmp_image_size) == NO_ERROR)
printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image));
else
printf("\nPoint3: Memory not allocated");
return 0;
}
signed char alloc_pixels(unsigned char **ptr, unsigned int size)
{
signed char status = NO_ERROR;
*ptr = NULL;
*ptr = (unsigned char*)malloc(size);
if(*ptr== NULL)
{
status = ERROR;
free(*ptr); /* this line is completely redundant */
printf("\nERROR: Memory allocation did not complete successfully!");
}
printf("\nPoint1: Memory allocated: %d bytes",_msize(*ptr));
return status;
}
Run Code Online (Sandbox Code Playgroud)
如果希望函数修改指针本身,则需要将其作为指针传递给指针.这是一个简化的例子:
void allocate_memory(char **ptr, size_t size) {
void *memory = malloc(size);
if (memory == NULL) {
// ...error handling (btw, there's no need to call free() on a null pointer. It doesn't do anything.)
}
*ptr = (char *)memory;
}
int main() {
char *data;
allocate_memory(&data, 16);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82211 次 |
| 最近记录: |