我有一个指针列表,它们引用了需要转向我游戏的时间对象.此示例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) 我想弄清楚我的错误.
我正在使用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++中,是否可以在程序运行时创建新数组?具体来说,假设我在类中有一个数据成员,并且变量的名称是数组,这是一个大小为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++中,我被告知这Foo** foo;是一个指向指针和数组数组的指针?
有人会详细说明为什么它是一个数组数组或如何解释为这样?
正如标题所说,我知道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) 我正在编译代码,它在以下函数中给出了错误:
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中指针和动态内存分配的谜团.我试图从用户那里获得几个浮点输入,将它们存储在一个动态分配的数组中,从而扩展以容纳更多的值.一旦用户输入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) 考试提问:
n,在哪里3划分n,我们如何才能打印链表的中间组元素(例如在1/3和2/3之间),只使用3指针,没有计数器?备注:我们不能左转,只有权利!
无法想出一个不涉及柜台的答案,有什么建议吗?
我正在使用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?
我有两个问题:
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)
谢谢您的帮助!