标签: pointers

在删除条目时,std ::指针列表变为无效

我有一个指针列表,它们引用了需要转向我游戏的时间对象.此示例TimeObject*在列表中有两个.此代码有效,直到从列表中删除某个项目:当发生这种情况时,另一个项目指向无效的地址.TimeObject发生这种情况时都不会被删除; 只有指针从列表中删除.是什么造成的?

TimeUnlink()被称为TimeObject::Tick().它不是静态的,但列表是.

我在Linux上使用GCC 4.6.2.该程序没有线程.

void TimeObject::TimeUnlink()
{
    printf("Time unlink\n");

    TimeObject::list_.remove(this);

    timeobject_flags_.linked_ = 0;
}

void GameTime::GameTurn(uint16_t _time)
{
    tick_ += _time;

    for(std::list<TimeObject*>::iterator it = TimeObject::list_.begin(); it != TimeObject::list_.end(); ++it)
    {
        TimeObject *timeobject = *it;

        printf("GameTurn %p\n", timeobject);

        if(timeobject == NULL) { printf("continue\n"); continue; }

        timeobject->time_ += _time;

        if(timeobject->speed_ && timeobject->time_ >= timeobject->speed_)
        {
            while(timeobject->timeobject_flags_.linked_ && timeobject->time_ - timeobject->speed_ > 0)
            {
                timeobject->time_ -= timeobject->speed_;

                if(timeobject->mapobject_)
                {
                    timeobject->mapobject_->Tick();
                }
            }
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c++ pointers segmentation-fault stdlist

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

调用方法不会更改值,除非从方法本身

我想弄清楚我的错误.

我正在使用AccountC++ 编写类,其中有一些方法,比如credit(),debit()等等.
我写了一个transfer()方法,我得到的问题是它从账户中拿出"钱",a1但不记得a2.但是,如果我在account.cpp中的方法本身中打印它,它确实显示正确的结果,而在main中,余额保持不变.

你能看出我的错误吗?与参考,指针等有关吗?
这是主要的:

a1.println(); 
a2.println();
cout<< "Valid parameter " << endl;
cout<< a1.transfer(a2, 13) << endl;
a1.println();
a2.println();
Run Code Online (Sandbox Code Playgroud)

这是它打印的内容:

(Account(65,140))
(Account(130,100))
Valid parameter 
1
(Account(65,127))
(Account(130,100))
Run Code Online (Sandbox Code Playgroud)

以下是方法的定义:

    // withdraw money from account
    bool Account::debit(int amount){
    if (amount>=0 && balance>=amount) {
        balance=balance-amount; // new balance
        return true;
    } else {
        return false;
    }
}


// deposit money
bool Account::credit(int amount){
    if (amount>=0) {
        balance=balance+amount; // new …
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference

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

在没有指针的情况下随时获取额外的内存

在C++中,是否可以在程序运行时创建新数组?具体来说,假设我在类中有一个数据成员,并且变量的名称是数组,这是一个大小为10的数组.假设在运行时我想要一个更大的数组,我可以不使用指针吗?我可以有如下方法吗?

int[] expandCapacity(int currentCapacity) {
     int [] arr = new int[currentCapacity*2];
     currentCapacity*=2;
     return arr;
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能通过这样说来使用此方法来扩展当前数组的容量:

currentCapacity = 10;
array = expandCapacity (currentCapacity);
Run Code Online (Sandbox Code Playgroud)

如果这样做,就不需要使用指针.我觉得我在这里缺少一些至关重要的东西.如果你能指出我所缺少的东西,我将不胜感激.

c++ arrays pointers

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

Foo**是一个数组数组?

在C++中,我被告知这Foo** foo;是一个指向指针和数组数组的指针?

有人会详细说明为什么它是一个数组数组或如何解释为这样?

c++ pointers

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

如果新的失败,是否需要检查指针有效性?

正如标题所说,我知道new会抛出一个可以捕获的异常,但是指针究竟发生了什么?它变成了NULL?我在SO上检查了一些答案,但没有人解释.检查下面的例子,指针保持在堆上?请提供有关此模式的完整信息

#include <windows.h>
#include <cstdlib>
#include <iostream>

using namespace std;

enum eReadMode
{
 //    READ_ONLY,
     READ_WRITE,
    // CREATE_FILE,
   //  CREATE_WRITE_FILE,
};

class CFileStatic
{
private:
    FILE *m_File;
public:
    CFileStatic( LPCTSTR szFileName, eReadMode eMode );
    virtual ~CFileStatic() {};

    bool IsValidFile() const { return( m_File != NULL ); };
    void PrintFile( unsigned int uLine = 0 );
};

CFileStatic::CFileStatic( LPCTSTR szFileName, eReadMode eMode )
{
    if( szFileName )
    {
        if( eMode == READ_WRITE )
            m_File = fopen( szFileName, "r+" );
        else
            printf( …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

错误:从'char*'转换为'unsigned int'会失去精度

我正在编译代码,它在以下函数中给出了错误:

inline char *align(char *var, DataType_e type)
{
    return (DataTypeSize[type] == 0) ? var :
        (char*) (((unsigned int)(var) + DataTypeSize[type]-1) /
                 DataTypeSize[type] * DataTypeSize[type]);
}
Run Code Online (Sandbox Code Playgroud)

以下错误符合"(unsigned int)(var)":

error: cast from 'char*' to 'unsigned int' loses precision
Run Code Online (Sandbox Code Playgroud)

如果我将"unsigned int"更改为"unsigned long",则编译可以正常运行,但是在运行程序时我没有得到预期的结果.有关如何解决此问题的任何想法?

c c++ pointers

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

为什么这段代码只循环4次?

背景:我试图澄清C中指针和动态内存分配的谜团.我试图从用户那里获得几个浮点输入,将它们存储在一个动态分配的数组中,从而扩展以容纳更多的值.一旦用户输入0,循环终止并计算和打印总和和平均值.我正在使用Borland C 5.02

问题:1.循环仅工作4次,然后第4个值未存储!
2.如果我用x [i]和*(x + i-1)用x [i-1]替换x + i,我得到"浮点错误:堆栈错误""异常程序终止.

int main(void)
{
   float *x;
   float sum=0;
   float avg=0;
   int i=0;

   x=(float*)malloc(sizeof(float));

   do
   {
        scanf("%f",x+i);  //take input

      i++;
      x=(float*)realloc(x, i*sizeof(float));  //reallocate memory to store more values
      if(x==NULL){printf("WARNING");}

      printf("\n%f    %p   %d\n",*(x+i-1),x,i);

   }while(*(x+i-1)!=0);

   for(int j=0;j<i;j++)
   {sum=sum+*(x+j);} // Sum all values

   avg=sum/(i-1);   //Find result, i is 1 bigger than number of values, ith value is 0

   printf("\n\n%d   sum: %f   avg: %f ",i,sum,avg);
   getch();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c malloc pointers

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

仅使用3个指针在Linked List的中间三分之一处找到元素?

考试提问:

  1. 给定一个未知大小的链表n,在哪里3划分n,我们如何才能打印链表的中间组元素(例如在1/3和2/3之间),只使用3指针,没有计数器?
  2. 我们怎么能只用两个指针做到这一点?

备注:我们不能左转,只有权利!

无法想出一个不涉及柜台的答案,有什么建议吗?

algorithm pointers linked-list

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

目标C中的指针值

我正在使用OpenGL着色器,它更喜欢C字符串到NSStrings,而且我遇到了以下奇怪的问题:

相关事实是这样的

1)shaderSource定义为

NSString* shaderSource
Run Code Online (Sandbox Code Playgroud)

2)glShaderSource的签名是

glShaderSource(GLuint shader, GLuint count, const GLchar** string, const GLint *length)
Run Code Online (Sandbox Code Playgroud)

这有效:

int len = [shaderSource length];
const char *cstr = [shaderSource UTF8String];
glShaderSource(shader, 1, &cstr, &len);
Run Code Online (Sandbox Code Playgroud)

这不起作用:

glShaderSource(shader, 1, &[shaderSource UTF8String], &[shaderSource length]);
Run Code Online (Sandbox Code Playgroud)

我在这里显然不了解客观方面的问题,我想纠正这个问题,所以如果你这么倾向,请祈祷告诉,WTF?

syntax pointers objective-c ios

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

指针指针方法C++

我有两个问题:

1)如何创建一个指向整数对象的数组?

int* myName[5];  // is this correct?
Run Code Online (Sandbox Code Playgroud)

2)如果我想返回一个指向数组的指针,指向对象(如(1))我怎么能在方法中做到这一点?ie)我想暗示这个方法:

int **getStuff() {
// what goes here?
return *(myName); // im pretty sure this is not correct
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

c++ methods pointers

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