我有一个更新 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/