举报

C++内存访问问题

0

win10,vs2022preview

目的:将二维指针p指向的空间拓宽,并按一定顺序赋值

思路:新定义另一个二维指针tempP,将p指向空间的中元素赋给tempP指向空间的元素,然后释放p指向的空间,把tempP的值赋给p,让tempP指向NULL

报错内容:

严重性    代码    说明    项目

警告    C6385    正在从 "tempP[r]" 读取无效数据。    

OriData** p = new OriData*[1];
p[0] = new OriData[1];
int r = 0;
int *s =new int[1];
s[0] = 0;		
p[0][0] = oridataP[0];
for (int i = 1; i < OriArrSize; i++)
{
		if ((p[r][s[r]]).GetComName() == (oridataP + i)->GetComName())
		{
			int sum1 = (p[r][s[r]]).GetsumMonth();
			int sum2 = (oridataP + i)->GetsumMonth();
			if ((sum2 - sum1) > 0)
			{
				OriData** tempP = new OriData*[r + 1];
				for (int m = 0; m < r; m++)
				{
					tempP[m] = new OriData[s[m]+1];
					for (int n = 0; n < s[m] + 1; n++)
					{
						tempP[m][n] = p[m][n];
					}
				}
				tempP[r] = new OriData[s[r] + 1 + sum2 - sum1];
				int N = 1;
				for (int n = 0; n < s[r] + 1 + sum2 - sum1; n++)
				{
					if (n < s[r] + 1)
					{
						tempP[r][n] = p[r][n];
					}
					else if (n >= s[r] + 1 && n < s[r] + 1 + sum2 - sum1)
					{
						tempP[r][n] = p[r][s[r]];//这里报错!!!!!!!!
						(tempP[r][n]).SetMonth((tempP[r][n]).GetMonth() + N);
						N++;
					}
				}
				for (int m = 0; m < r; m++)//释放p管理的内存
				{
					delete[] p[m];
				}
				delete[] p;
				p = tempP;//p接管tempP管理的内存
				tempP = NULL;
				s[r] += sum2 - sum1;
			}
			p[r][s[r]] = p[r][s[r]] + *(oridataP + i);
		}
		else
		{
			OriData** tempP = new OriData * [r + 1 + 1];
			for (int m = 0; m < r + 1; m++)
			{
				tempP[m] = new OriData[s[m]+1];
				for (int n = 0; n < s[m]+1; n++)
				{
					tempP[m][n] = p[m][n];
				}
			}
			int* temp = new int[r + 1 + 1];
			for (int n = 0; n < r + 1 ; n++)
			{
				temp[n] = s[n];
			}
			temp[r+1] = 0;
			delete[] s;
			s = temp;
			temp = NULL;
			for (int m = 0; m < r+1; m++)
			{
				delete[] p[m];
			}
			delete[] p;
			tempP[r+1] = new OriData[1];
			p = tempP;
			tempP = NULL;
			r++;
			p[r][s[r]] = p[r][s[r]] + *(oridataP + i);
		}
}
ava
燕来

2024-7-10

悬赏金额:¥20元

1. 回答问题后,可以看到提问者联系方式。

2. 如果对问题有不明确的地方,可以在回复中写下你的疑问,就可以看到提问者的联系方式,然后详细沟通。

3. 如果私下沟通解决了问题,建议回答者将解决方案补充到本站,提问者勾选正确答案。每个人回答的问题数量,是能力的象征。

4. 回答问题后,可以通过提问者的联系方式私下协商领取悬赏的方式,本站不做任何干涉,不做担保,不抽取佣金,请双方谨慎操作。

如果需要更多代码的内容来解决问题,或需要提高赏金,请联系我,麻烦了。 -  燕来  2024-7-10
举报
技术讨论社区
相关提问