标签: dereference

表达式:字符串迭代器不可解除引用

我在C++中使用std :: string :: iterators很难.这段代码编译很好(仍然没有得到正确的输出,但这是我的错:TODO,修复算法)在Dev-C++中,我没有得到运行时错误.错误是使用Visual Studio Express 2008 C++,我收到指向<xstring>的错误:"Expression:string iterator not dereferencable",并指向<xstring>文件的第112行.

我的调试告诉我,我可能试图在句子输入结束时取消引用,但我看不到哪里.任何人都能解释一下吗?

std::string wordWrap(std::string sentence, int width)
{    
    std::string::iterator it = sentence.begin();

    //remember how long next word is
    int nextWordLength = 0;
    int distanceFromWidth = width;

    while (it < sentence.end())
    {
       while (*it != ' ' && it != sentence.end())
       {
          nextWordLength++;
          distanceFromWidth--;
          it++;
       }

       if (nextWordLength > distanceFromWidth)
       {
          *it = '\n';
          distanceFromWidth = width;
          nextWordLength = 0;
       }

       //skip the space
       it++;

   }

   return sentence;    
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator dereference

0
推荐指数
2
解决办法
1万
查看次数

C中的组合解除引用和减少

我需要尽可能高效的方法来移动数组的内容.我需要将每个数组位置的内容向右移动并忽略第一个,这样我就可以在那里写一个新值.

这就是我所拥有的:

#define LENGTH 5

int myArray[LENGTH] = {1, 2, 3, 4, 5};

int *pa = myArray + (LENGTH - 1);

for (ushort i = 5; i > 0; i--) {
    *pa = *(pa - 1);
    pa--;
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是将for循环的两行组合成一个操作.就像是:

*pa = *(pa--);
Run Code Online (Sandbox Code Playgroud)

但是,结果是未定义的.我坚持使用我已经使用的东西吗?

编辑:我应该澄清这不是我正在使用的实际代码,只是一个快速的例子来演示我所追求的构造.

c performance pointers dereference decrement

0
推荐指数
2
解决办法
718
查看次数

取消引用成员指针错误:不能用作成员指针

我有以下(截断的)类声明:

template <typename T>
class btree 
{
    public:

        btree(const btree<T>& original); //This is btree's copy constructor

    private:

        struct btree_node 
        {
            btree_node(const btree_node &other)
            {
                //This is node's copy constructor
            }
        }

        btree_node* headNode;
}
Run Code Online (Sandbox Code Playgroud)

并且btree的复制构造函数以这种方式实现:

template <typename T> 
btree<T>::btree(const btree<T>& original)
{
    headNode = new btree_node(original.*headNode);
}
Run Code Online (Sandbox Code Playgroud)

原始.*headNode应该返回original.headNode指向的btree_node,从而匹配btree_node的拷贝构造函数参数.

但是我收到以下错误:

错误:((B树*)此) - > B树:: headNode'不能用作部件指针,因为它是类型为"B树:: btree_node*"

我究竟做错了什么?

c++ pointers class dereference

0
推荐指数
2
解决办法
3664
查看次数

在C中将数组的内容转换为算术类型

我将面对奇怪的行为,将数组中的单个项目(或更多甚至解除引用)转换为单个算术类型.

下面是一个简化的测试用例:

void test1()
{
    unsigned char test[10] = {0};
    unsigned long i=0xffffffff;

    *((unsigned long *)(&test[3])) = i;


    int it;

    for ( it = 0 ; it < 10 ; it++ )

    {
        printf("%02x ", test[it]);

    }
}
void test2()
{
    unsigned char test[10] = {0};
    unsigned char test2[10] = {0};
    test[2]=0xFF;
    test[3]=0xFF;

    *((unsigned short *)(&test2[1])) = *((unsigned short *)(&test[2]));


    int it;

    for ( it = 0 ; it < 10 ; it++ )

    {
        printf("%02x ", test2[it]);

    }
} …
Run Code Online (Sandbox Code Playgroud)

c pointers casting access-violation dereference

0
推荐指数
1
解决办法
129
查看次数

c - 取消引用指向不完整类型的指针 - 带有指向char*的指针的错误

我在访问另一个结构中的char*时遇到问题,继承代码:

User_Network.c:

struct User_Networks_t {
    SocialNetwork network;
};

typedef struct User_Networks_t* User_Networks;


void aaa(User_Networks u1)
{
    u1->network->Name = "test";  /// ERROR: dereferencing pointer to incomplete type 
}
Run Code Online (Sandbox Code Playgroud)

这是我在SocialNetwork.h中的内容:

typedef struct SocialNetwork_t* SocialNetwork;
Run Code Online (Sandbox Code Playgroud)

SocialNetwork.c中的结构:

struct SocialNetwork_t {
    char *Name;
};
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这个错误?

c pointers dereference

0
推荐指数
1
解决办法
3466
查看次数

如何取消引用指向类实例的指针?

问题摘要:我指向一个类实例的指针,但是,当我尝试取消引用此指针并访问实例的属性时,我得到一个EAccessViolation异常,因为它取消引用"Nil".

我在单位范围内声明了指针:

private
  CurrentRXFrame: ^TSXcpFrame;
Run Code Online (Sandbox Code Playgroud)

每次我的程序收到一个帧时,指针都会更新为指向这个最新的帧:

procedure TfrmFoo.OnReceivingFrame(Sender: TObject);
var
  SXcpFrame: TSXcpFrame;
begin
  SXcpFrame := TSXcpFrame.Create();
  CurrentRXFrame := @SXcpFrame;
Run Code Online (Sandbox Code Playgroud)

我尝试在同一单元中的其他一些例程中取消引用指针,但得到一个异常:

// `FrameBytes` is merely a dynamic array of type "Byte".
PrintMsg(IntToHex(CurrentRXFrame^.FrameBytes[0], 2)); 
Run Code Online (Sandbox Code Playgroud)

例外:

raise exception class EAccessViolation with message 'Access violation at address 004DD1FE [...] Read of address 00000010.

如果我在此行之前设置断点,则相关变量评估为:

CurrentRXFrame := $18FD10
CurrentRXFrame^ := nil
CurrentRXFrame^.FrameBytes := Inaccessible value
Run Code Online (Sandbox Code Playgroud)

问题:如何TSxcpFrame通过指针访问类实例的属性?

delphi pointers delphi-7 dereference

0
推荐指数
1
解决办法
892
查看次数

指针解引用算子的评估顺序

我正在编写一些用于从双向链表中删除节点的代码,我遇到了以下语法.虽然我能够理解语法正在做什么但是不能得到top get下面的代码如何可能

struct dll{
   int data;
   struct dll *next;
   struct dll *prev;
};
Run Code Online (Sandbox Code Playgroud)

并且在某些功能中有这种语法

else{
  temp2=temp->prev;
  temp2->next=temp->next;
  temp->next->prev=temp2;
  free(temp);
}
Run Code Online (Sandbox Code Playgroud)

我知道temp->next它使temp指针指向的是什么next node,从语法中我也可以理解,temp->next->prev这会使指针指向prev pointer of the next node.

但问题是如何评估这种语法?

c struct pointers dereference

0
推荐指数
1
解决办法
103
查看次数

指针增量时的行为.C++

请考虑以下代码:

int main()
{
    int* p = new int(3);
    p+=4;
    std::cout<<*p<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我的编译器(Visual Studio 2012)打印:-7514522142int这种情况.
那么我们能以某种方式推断出输出并且这段代码合法吗?

c++ pointers dereference

0
推荐指数
1
解决办法
69
查看次数

为什么用指针表示法取消引用特定的数组索引是不可能的

我有两个不同的代码示例.在第一个代码中,可以取消引用:

void getValue(int *myPointer)
{
    *myPointer = 10000;             
    return;
}


int main()
{
    int get_the_value = 2;
    getValue(&get_the_value);


    printf("The value of get_the_value = %d\n", get_the_value);
    return 0;


}
Run Code Online (Sandbox Code Playgroud)

但是在下面的代码中,不可能在func()中取消引用*B. 我从互联网上下面有这个代码,他们说:

" B是一个指向int的指针,因此B [0]是一个int,你不能取消引用一个int. "

但是*myPointer在第一个代码中也不是int类型吗?

所以我的问题是:为什么解除引用在第一个代码中工作而在第二个代码中不起作用?

#include <stdio.h>

int func(int *B){
    *B[0] = 5;
}

int main(void){

    int B[3] = {1, 2, 3};
    printf("b[0] = %d\n\n", B[0]);
    func(&B);
    printf("b[0] = %d\n\n", B[0]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c pointers dereference

0
推荐指数
1
解决办法
340
查看次数

了解取消引用的类型-const_iterator

我有这个声明:

list<string*>::const_iterator iter;
Run Code Online (Sandbox Code Playgroud)

我想了解的类型是否*iter为:string*,const string*或别的东西。

我读到cost_iterator返回参考。一方面,列表包含string*,迭代器指向这些列表。另一方面,const_iterator它指向的值应该是,const并且它的作用就像列表中的数据是const?尽管不是真的吗?不确定我缺少什么,正确的答案是什么。

c++ types const-iterator dereference

0
推荐指数
1
解决办法
70
查看次数