将指向char数组的指针传递给函数

时间:2009-11-29 02:04:15

标签: c arrays pointers char function-pointers

我有一个指向我的char数组的指针。

    unsigned char *recvBuf;
    recvBuf = (unsigned char *)malloc(sizeof(char)*RECVBUF);

然后我将其传递给定义为

的函数
void setHeader(MyHeader *myHeader, unsigned char *buffer)

将前12个字节复制到结构

然后我尝试将其传递给另一个函数

Record readRecord(unsigned char *buffer, int *arrayPosition, int buffsize)

但是当我尝试使用[]访问数组的任何部分时,程序总是变得无法响应,就像在之前的功能中使用的一样。在我将它传递给函数之前,我也可以这样访问它。

我们非常感谢您的想法。

由于

编辑:

指针是一样的。

这是第二个功能

我将此代码添加到顶部并且工作正常

int k = *arrayPosition;
    printf("%p \n", buffer);

    printf("%c \n", buffer[k]);

这是原始代码,程序在i = * arrayposition ...

之后变得没有响应
int i, j;
Record *myRecord;
Resource *myResource;
unsigned char name[255];
unsigned char data[50];
unsigned int offset;

i = *arrayPosition;

while(buffer[i] != '\0')
{
    if((buffer[i] & 0xC000) == 0xC000)
    {

2 个答案:

答案 0 :(得分:2)

真的需要更多的背景来协助这里,你所说的内容并没有明显的不妥。

基础:

  1. 检查您是否已编入索引 记忆块的结束。
  2. 检查你没有经过 & recvBuf你想要通过的地方 recvBuf?编译器应该 抓住这个,但如果你这样做,你可能会丢弃你的筹码,也许是使用演员。

答案 1 :(得分:1)

输入不足以确定导致指针变坏的问题,但如果指针在您描述的函数调用之间发生变化,那么很好的方法是检查gdb。

你修改了数组中的任何字符吗?在这种情况下,您应该使用*取消引用指针。

如果在调用原因后无法使用指针,则可以:

  1. 在功能
  2. 中错误地更改了
  3. 它是一个指向堆栈中已分配值的指针,该值在某处隐式释放(但听起来很奇怪)