繁体   English   中英

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

[英]Passing a pointer to a char array to a function

我有一个指向这样的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]);

这是原始代码,该程序变得无响应adfter 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)
    {

确实需要更多上下文来协助您,但您所说的话显然没有什么不对劲。

基本:

  1. 检查您是否尚未索引完内存块的末尾。
  2. 检查您是否没有将&recvBuf传递给打算通过recvBuf的地方? 编译器应该捕捉到这一点,但是如果这样做,您可能会浪费堆栈,也许使用强制转换。

输入的数据不足以确保导致指针变坏的问题,但是一个不错的选择是使用gdb检查指针在您描述的函数调用之间是否发生了变化。

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

如果调用后不能使用指针,原因可能是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM