【问题标题】:How to create a function that alloccate 10 bytes to a pointer, then check whether pointer has been allocated yet, return boolean? [closed]如何创建一个为指针分配 10 个字节的函数,然后检查指针是否已分配,返回布尔值? [关闭]
【发布时间】:2019-12-01 15:50:35
【问题描述】:

对不起,我的英语不好。我现在正在从根本上学习C编程,并且我有一个家庭作业。

问题说:创建一个函数,动态分配10个字节给一个指针,然后检查指针是否已经分配?该函数必须是布尔值,并且返回布尔值。

函数原型:bool allocate10Bytes(uint8_t * outPtr);

请帮助我。非常感谢!

【问题讨论】:

  • 这几乎是malloc 的包装器。
  • outPtr的类型好像不对,不应该是uint8_t **outPtr吗?
  • 函数的签名应该是bool allocate10Bytes(uint8_t ** outPtr);。它应该是一个指向指针的指针。
  • 那么这个函数会是个没用的函数,会泄露内存……
  • 关于原型,这是我从我导师那里得到的,他说没有任何限制,我无权更改它。假设没有错误,如果你的“导师”认为他提供的原型可以工作,他就没有资格成为 C 语言的导师。

标签: c function pointers boolean definition


【解决方案1】:

你的意思好像是这样的

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>

bool allocate10Bytes( uint8_t **outPtr )
{
    const size_t N = 10;

    *outPtr = malloc( N * sizeof( uint8_t ) );

    return *outPtr != NULL;
}

int main(void) 
{
    uint8_t *p;

    bool success = allocate10Bytes( &p );

    if ( success ) free( p );

    return 0;
}

你问题中的这个函数原型

bool allocate10Bytes(uint8_t * outPtr);

无效。要成为输出参数,指针必须声明为uint8_t **outPtr。那就是一个参数(一些指针)应该通过指向指针的指针通过引用传递。

注意:如果您尝试将程序编译为 C++ 程序,那么至少重写此语句

*outPtr = malloc( N * sizeof( uint8_t ) );

喜欢

*outPtr = ( uint8_t * )malloc( N * sizeof( uint8_t ) );

并删除标题&lt;stdbool.h&gt;

【讨论】:

  • 感谢您的回答,但我在测试此程序时遇到问题。我目前正在使用 DevC++(按照我的导师的要求),问题是:[Error] invalid conversion from 'void*' to 'uint8_t* {aka unsigned char*}' [-fpermissive] 在 *outPtr = malloc( N * sizeof(uint8_t));。你能告诉我更多吗?
  • @phongisntreal 我对您正在运行的代码一无所知。我回答了你的问题。如果您的代码有问题,请提出一个新问题。
  • @phongisntreal:这是一条 C++ 错误消息。您正在使用 C++ 编译器编译此代码,但您标记了问题 C。您要使用哪种语言?
  • @phongisntreal 您可以使用以下方式编写 malloc 调用 *outPtr = ( uint8_t * )malloc( N * ( sizeof( uint8_t ) ); 在这种情况下,程序将使用 C++ 编译器进行编译。
  • 我在 C 中需要它,我将在编译器中使用 gcc 构建它。对不起我不成熟的编程技能:(
猜你喜欢
  • 2023-02-02
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2011-10-26
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
相关资源
最近更新 更多