C 程序 : Update unsigned char pointer array with function

标签 c arrays function pointers unsigned-char

我有一个更新 unsigned char* 的功能,但找不到我的错误所在。我不确定我是否需要分配内存,或者我是否指向某处错误的内存空间。我尝试遵循与发布的相似结构 here , 但没有成功使用 unsigned char

到目前为止我的代码:

#include <stdio.h>

void changeArray(unsigned char **arr)
{
    unsigned char ptr[3] = {100, 101, 102};
    *arr = ptr;
    printf("%d\n", **(arr+0)); // This prints out the correct value of 100
}

int main(int argc, const char* argv[])
{
    int i = 0;
    unsigned char *blah;
    unsigned char ptr2[3] = {103, 104, 105};
    blah = ptr2;
    printf("Blah is: \n");
    for (i = 0; i < 3; i++) {
        printf("%d,",*(blah+i)); //This prints out 103,104,105
    }
    changeArray(&blah);
    printf("Blah is now: \n");
    for (i = 0; i < 3; i++) {
        printf("%d,", *(blah +i)); //This prints out 0,0,0
    }
    return 0;
}

对于确定如何正确访问 changeArray() 函数中设置的值的任何帮助,我们将不胜感激。

最佳答案

使用此*arr = ptr;,您将存储一个指向具有自动存储持续时间 的变量的指针。行为 undefined .

您可以通过这种方式动态分配和返回指针:

void changeArray(unsigned char **arr)
{
    unsigned char ptr[3] = {100, 101, 102};
    unsigned char *p = malloc(sizeof ptr); 
    memcpy(p, ptr, sizeof ptr);
    *arr = p;
    printf("%d\n", **(arr+0)); // This prints out the correct value of 100
}

如果 malloc 失败,您还应该进行错误检查,并记住在 main 中使用后释放分配的内存。

关于C 程序 : Update unsigned char pointer array with function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784617/

相关文章:

R类型转换expression()function()

C - 创建带有值的动态矩阵

javascript - Jquery innerHTML 分割

c - 打印机模块的ESC/POS命令

ruby - 在 Ruby 中操作字符串和数组

ruby-on-rails - 从数组中检索 x 个随机元素

java - 相邻数组的最小值

c - 如何创建函数指针的动态数组?

c语言移动指针后如何释放它

使用C代码计算库仑定律