【发布时间】:2009-11-29 02:04:14
【问题描述】:
我有一个指向我的 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)
{
【问题讨论】:
-
你确定你没有修改其中一个函数内的指针值吗?插入数据时是否取消引用指针?
-
一些风格问题:在 C(但不是 C++)中,转换
malloc的返回值通常被认为是不好的风格,因为void *被隐式转换为任何其他指针类型。此外,sizeof(char)在 C(和 C++)中始终为 1,因此乘以它是多余的。第二行代码应该是这样的:recvBuf = malloc(RECVBUF);. -
我认为大多数编译器都会消除这种冗余。有时它只是用来写更清晰的代码:size_of_item * number_of_items
-
有趣的是,您使用的是“无响应”一词,如果您取消引用错误的指针,我预计会崩溃/核心。你有可能在那个 while( buffer[i] != '\0' ) 循环中旋转吗?也许您没有通过某些控制路径增加 i ?
标签: c arrays pointers char function-pointers