标签: pointers

指针数组和大小混乱

为什么以下代码输出4

char** pointer = new char*[1];
std::cout << sizeof(pointer) << "\n";
Run Code Online (Sandbox Code Playgroud)

我有一个指针数组,但它应该有长度1,不应该吗?

c++ pointers

12
推荐指数
2
解决办法
3083
查看次数

C++静态const通过NULL指针访问

class Foo {
public:
 static const int kType = 42;
};

void Func() {
 Foo *bar = NULL;
 int x = bar->kType;
 putc(x, stderr);
}
Run Code Online (Sandbox Code Playgroud)

这是定义的行为吗?我阅读了C++标准但是找不到任何关于访问静态const值的内容......我已经检查了GCC 4.2,Clang ++和Visual Studio 2010生成的程序集,并且它们都没有执行NULL的解引用指针,但我想确定.

c++ static pointers

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

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

保持指向变量的指针超出范围是否安全?

示例代码:

#include <stdio.h>
int main (){
    int *p;
    {
        int v = 1;
        p = &v;
    }
    printf("%d\n", *p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但我不确定是否保证v的地址将被保留.

c pointers

12
推荐指数
2
解决办法
966
查看次数

确定指针是否有效

我的观察是,如果free( ptr )调用if ptr不是指向系统分配的内存的有效指针,则会发生访问冲突.让我们说我这样称呼free:

LPVOID ptr = (LPVOID)0x12345678;
free( ptr );
Run Code Online (Sandbox Code Playgroud)

这肯定会导致访问冲突.有没有办法测试指向的内存位置ptr是否是有效的系统分配内存?

在我看来,Windows操作系统内核的内存管理部分必须知道已分配了哪些内存以及剩余的内存用于分配.否则,它怎么知道是否有足够的内存来满足给定的请求?(修辞) 也就是说,似乎有理由断定必须有一个函数(或一组函数)允许用户确定指针是否是有效的系统分配内存.也许微软没有公开这些功能.如果微软没有提供这样的API,我只能假定它是出于故意和特定的原因.提供这样一个钩子进入系统是否会对系统安全造成重大威胁?

情况报告

虽然知道内存指针是否有效在许多情况下都很有用,但这是我的特殊情况:

我正在为新的硬件编写驱动程序,以替换通过USB连接到PC的现有硬件.我的任务是编写新的驱动程序,以便对当前驱动程序的现有API的调用将继续在使用它的PC应用程序中工作.因此,对现有应用程序唯一需要的更改是在启动时加载适当的驱动程序DLL.这里的问题是现有的驱动程序使用回调将接收到的串行消息发送给应用程序; 指向包含消息的已分配内存的指针通过回调从驱动程序传递到应用程序.然后,应用程序负责调用另一个驱动程序API,通过将相同的指针从应用程序传递给驱动程序来释放内存.在这种情况下,第二个API无法确定应用程序是否实际传回了指向有效内存的指针.

c++ memory free pointers

12
推荐指数
6
解决办法
8054
查看次数

何时使用指向类的指针以及何时将其实例化为变量

我有点困惑.我能找到的最好的东西是阅读cplusplus.com教程,他们不得不说出关于类的指针.

"创建指向类的指针是完全有效的.我们只需要考虑一旦声明,类就成为有效类型,所以我们可以使用类名作为指针的类型"

这告诉我什么时候在正常的实例化中使用它们.我已经多次看过 - >运算符,并查看了一些代码,但无法解释为什么会这样做.

通用的例子将不胜感激; 但更具体地说与gui编程有关.它是我第一次遇到它的地方.

QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(nameLabel, 0, 0);
mainLayout->addWidget(nameLine, 0, 1);
mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
mainLayout->addWidget(addressText, 1, 1);
Run Code Online (Sandbox Code Playgroud)

为什么不

QGridLayout mainLayout
mainLayout.addWidget
...
Run Code Online (Sandbox Code Playgroud)

(如果我将示例代码更改为并且尝试了但是你得到了重点,它就不会编译)

提前致谢

c++ pointers

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

C中的更多链接列表

在我开始我想讲清楚,我不想回答我的家庭作业的问题,我只是想,如果有人能真正解释正是我的教练在这种分配(最好是简单化版)要求,也许一个有用的推动正确的方向.我在这个话题上遇到了很多麻烦,每当我问导师时,我发现他比我更困惑我.

所以,这是作业:

1.添加一个新函数insertN(struct list*x,int num,int pos,int n),它将在pos位置插入n个整数num的副本,如果可能的话(如果pos太大,采取适当的行动) .我在这里感到困惑的主要是他所说的位置pos.

这是我正在使用的代码 - 由我的老师编写,我必须修改它.

#include<stdio.h>
#include<stdlib.h>

struct list {
    int data;
    struct list * next;
        };

struct list *slist;

/*adds a node at the end of the linked list*/
void insert(struct list *x,int num){
  /*if the list is empty*/
  if(x==NULL){
    /*create first node*/
    slist=malloc(sizeof(struct list));
    slist->data=num; 
    slist->next=NULL;
    }
  else{
    /*go to the last node*/
    while(x->next!=NULL) x=x->next;
    /*add node at the end*/
      x->next=malloc(sizeof(struct list));
      x->next->data=num;
      x->next->next=NULL;

  }
}


void display(struct list *x){
  /*traverse the …
Run Code Online (Sandbox Code Playgroud)

c pointers structure linked-list

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

对传染媒介的尖对指针传染媒介对指针传染媒介的指针

只是想知道你认为什么是关于C++中矢量的最佳实践.

如果我有一个包含vector成员变量的类.该向量何时应声明为:

  1. "全对象"矢量成员变量包含值,即 vector<MyClass> my_vector;
  2. 指向矢量的指针,即 vector<MyClass>* my_vector;
  3. 指针传染媒介,即 vector<MyClass*> my_vector;
  4. 指向矢量指针,即 vector<MyClass*>* my_vector;

我在我的一个类中有一个特定的例子,我当前已将一个向量声明为case 4,即vector<AnotherClass*>* my_vector; AnotherClass是我创建的另一个类.

然后,在我的构造函数的初始化列表中,我使用new创建向量:

MyClass::MyClass()
: my_vector(new vector<AnotherClass*>())
{}
Run Code Online (Sandbox Code Playgroud)

在我的析构函数中,我执行以下操作:

MyClass::~MyClass()
{
  for (int i=my_vector->size(); i>0; i--)
  {
    delete my_vector->at(i-1);
  }
  delete my_vector;
}
Run Code Online (Sandbox Code Playgroud)

向量的元素添加到我的类的一个方法中.我不知道有多少物体会提前添加到我的矢量中.这是在代码执行时决定的,基于解析xml文件.

这是好习惯吗?或者是否应该将向量声明为其他情况1,2或3中的一个?

何时使用哪种情况?

我知道如果向量的元素是另一个类的子类(多态),则它们应该是指针.但是应该在任何其他情况下使用指针吗?

非常感谢你!!

c++ pointers vector

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

Calloc结构与C中的指针

我知道要使用的calloc请求内存,在所有位上写0,然后返回指向它的指针.

我的问题是:如果我使用包含指针的结构的calloc,那些指针会有NULL值还是我必须将它们设置为指向NULL?

struct a{
char * name;
void * p;
}* A;
Run Code Online (Sandbox Code Playgroud)

所以基本上,在我使用带有struct a的calloc之后,name和p会指向NULL吗?

谢谢!

c null pointers structure calloc

12
推荐指数
2
解决办法
7833
查看次数

指向C中的const字符串的指针

char *p = "string"; //creates pointer to constant string

char p[] = "string"; //just an array with "string"
Run Code Online (Sandbox Code Playgroud)

我只是有点困惑为什么它在第一个例子中创建一个指向常量字符串的指针?它不应该仅仅是指向内存中带有"字符串"的地方的指针吗?

c arrays pointers const

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

标签 统计

pointers ×10

c ×5

c++ ×5

structure ×2

arrays ×1

calloc ×1

const ×1

free ×1

linked-list ×1

memory ×1

null ×1

static ×1

vector ×1