zoukankan      html  css  js  c++  java
  • 一个常见的错误时编写代码

    实验室阶段做练习,其中,变化bug称号:
    #include <iostream>
    #include <vector>
    
    int main(int, char**)
    {
    	std::vector<int>** ppRandomData = distributeRandomInt(100);
    
    	for (unsigned int i=0; i<1000; i++)
    	{
    		if (ppRandomData[i])
    		{
    			std::cout << "Elements in [" << i << "] : ";
    			for (unsigned int k=0; k<ppRandomData[i]->size(); k++)
    			{
    				std::cout << ppRandomData[i]->at(k) << " ";
    			}
    			std::cout << std::endl;
    		}
    	}
    
    	delete[] ppRandomData;
    	return 0;
    }
    
    std::vector<int>** distributeRandomInt(int vMod)
    {
    	assert(vMod > 0);
    	std::vector<int> **ppContainer;
    
    	ppContainer = new std::vector<int>*[vMod];
    
    	srand(0);
    
    	for (int i=0; i<1000; i++)
    	{
    		int RandomNum = rand();
    
    		std::vector<int> *pContainer = ppContainer[RandomNum%vMod];
    	
    		if (pContainer = NULL)
    		{
    			pContainer = new std::vector<int>;
    		}
    		pContainer->push_back(RandomNum);
    	}
    	return ppContainer;
    }
    

    这个题考了几个考点:

    1 首先申请数组指针时一定要记得初始化数组中每个成员

    2指针域指针之间的赋值与引用

    3= 与==的差别

    4内存泄露 :释放指针 与释放指针的指针

    5 这个migic number

    改动例如以下:

    #include <assert.h>     //add
    #include <iostream>
    #include <vector>
    
    std::vector<int>** distributeRandomInt(int vMod);
    
    const int Total = 100;
    
    int main(int, char**)
    {
    	std::vector<int>** ppRandomData = distributeRandomInt(100);
    
    	//for (unsigned int i=0; i<1000; i++)
    	for (unsigned int i=0; i<100; i++)//100 migic number
    	{
    		if (ppRandomData[i])
    		{
    			std::cout << "Elements in [" << i << "] : ";
    			for (unsigned int k=0; k<ppRandomData[i]->size(); k++)
    			{
    				std::cout << ppRandomData[i]->at(k) << " ";
    			}
    			std::cout << std::endl;
    		}
    	}
    
    	for (int i=0; i<100; ++i)
    	{
    		if (ppRandomData[i] != NULL) delete ppRandomData[i];//释放数组中每一块申请的内存
    	}
    
    	delete[] ppRandomData;
    	return 0;
    }
    
    std::vector<int>** distributeRandomInt(int vMod)
    {
    	assert(vMod > 0);
    	std::vector<int> **ppContainer;
    
    	ppContainer = new std::vector<int>*[vMod];
    
    	for (int i=0; i<vMod; ++i)//初始化数组指针
    	{
    		ppContainer[i] = NULL;
    	}
    
    	srand(0);
    
    	for (int i=0; i<1000; i++)
    	{
    		int RandomNum = rand();
    
    		//std::vector<int> *pContainer = ppContainer[RandomNum%vMod];
    		std::vector<int>*& pContainer = ppContainer[RandomNum%vMod];//指针的引用,要改变指针的值
    		//if (pContainer = NULL)
    		if (pContainer == NULL)// = 与==的差别
    		{
    			//pContainer = new std::vector<int>;
    			pContainer = new std::vector<int>;
    		}
    		pContainer->push_back(RandomNum);
    	}
    
    	return ppContainer;
    }
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-结构体&文件
    c博客作业-指针
    C语言博客作业04--数组
    C语言博客作业03--函数
    图书馆
    5-互评-OO之接口-DAO模式代码阅读及应用.xls
    DS博客作业04--图
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4868285.html
Copyright © 2011-2022 走看看