C++中指针未初始化的问题

源代码:

IntList::IntList(int numVals , int val ) {

if (numVals>0){

numberValues=numVals;

values=new int[numVals];

for(int i=0;i<numVals;++i){

values[i]=val;

}

} else

numberValues=0;

}

IntList::IntList(const IntList &il) {

numberValues=il.size();

if(numberValues>0){

values=new int[numberValues];

for(int i=0;i<numberValues;++i){

values[i]=il.values[i];

}

}

}

IntList::~IntList() {

}

这段代码乍一看没有什么问题,在编译器上也不会崩溃,但是在服务器上却会崩溃原因在于:

当numberValues=0时,没有处理values的值。所以IntList b时,b里的values未初始化。后面delete的时候就会出现问题。

解决方法是:

在else语句,当numbervalues=0时,应给values也给予初值。

Values=NULL。

问题就解决了

原文地址:https://www.cnblogs.com/zyd746714868/p/8544716.html

时间: 2024-10-04 17:45:13

C++中指针未初始化的问题的相关文章

DSP开发中遇到的问题 - 类指针未初始化后果

收到RECEIVE_REQ_MSG消息时会执行下面的代码,这里因为某种原因m_receiverSlaverController的值仍为NULL,并没有指向具体的CReceiverSlaverController类.执行到ReceiveHandler函数时,在ReceiveHandler函数中,会通过CReceiverSlaverController类的成员变量m_measurementAgent(类型为Agent类)调用Agent类的成员函数handleMessage,然后在ReceiveHan

C++中指针不初始化就传递的问题

C++中指针的使用.以前在使用指针之前都会初始化.今天没有初始化,然后指针传递后没有内容(testptrnoret),后来发现返回指针的话(testptrret),就可以了. // testptr.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int* testptrret(int* a,int n) { a = new int[n]; for (int i = 0; i < n;i++) { a[i] = i; } return a;

未初始化的指针与空指针

指针使用前先被初始化指向一块特定的内存地址.如果不这样做,指针可能会指向任何位置,从而导致不愉快的后果,比如覆盖了其他变量的值,,或程序崩溃,为避免 此类事故或其他不良后果,应该先养成使用指针前初始化. 可以使用NULL这个C++特殊值来标记没被初始化的指针.每新建一个指针,你应该先将它的设置为NULL,这样可以方便以后检查 int *p_int = NULL; //可能设置,也可能不设置p_int的代码 if(p_int != NULL) { *p_int = 2; }

C语言指针的初始化和赋值

1.指针的初始化 指针初始化时,"="的右操作数必须为内存中数据的地址,不能够是变量,也不能够直接用整型地址值(可是int*p=0;除外,该语句表示指针为空).此时,*p仅仅是表示定义的是个指针变量,并没有间接取值的意思. 比如: int a = 25; int *ptr = &a; int b[10]; int *point = b; int *p = &b[0]; 假设:int  *p; *p = 7; 则编译器(vs2008)会提示The variable 'p'

C++ 中指针与引用的区别

指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引用是某块内存的别名.     ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化

编写高质量代码,改善C++程序的150个建议:指针、初始化和运算符

建议0:不要让main函数返回void 首先C++ 标准中从没有出现过void main(){}这样的函数定义. 标准的主函数定义有两种: int main() int main(int argc,char * argv[]) 在main函数中,return 语句的作用在于离开main函数(析构掉所有具有动态生存时间的对象),并将其返回值作为参数来调用exit函数.如果函数执行到结尾儿没有遇到return 语句,其效果就等于执行了return 0. 建议1:区分0 的四种面孔 1)整形0.作为一

c语言中指针的一个小错误

在定义指针后需要给指针赋值然后才能使用*p赋值或被赋值,这是个基础问题,没有理解,导致出问题. 空指针 ,也称悬 游指 针 ,是使 用 未初 始化 的指 针 .指针变量未初始化时它的值不是没有 ,而是一个不确定值 ,它 的指 向也 是 不确 定 的,可 能 会 破 坏 系 统 正 常工作状 态 ,出现灾难 性后果 .例 :m ain ( ){int a = 10 , *p a :*p a = a :*pa +=5 :prin tf (“a=%d ”, p a) :)本例中的程序本意是利用指 针将

C++中指针和引用的区别(转载)

C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引用是某块内存的别名.     ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3

C语言中指针和数组

C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之自信,总认为自己是天选之人,明知山有虎,偏向虎山行,直到最后用C的人都要被指针虐一遍. 指针 首先,明确一个概念,指针是什么,一旦提到这个老生常谈且富有争议性的话题,那真是1000个人有1000种看法. 在国内的很多教材中,给出的定义一般就是"指针就是地址",从初步理解指针的角度来说,这种