问题描述
我正在尝试解决来自 HackerRank 的一个编程问题。编程挑战是关于具有动态内存的可变大小数组。我遇到了内存分配的奇怪问题。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
typedef unsigned int u_int;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
u_int n=0,q=0;
scanf("%d%d",&n,&q);
if(n<0 || n>pow(10,5) || q < 0 || q>pow(10,5)){
return 0;
}
printf("entered %d & %d\n\r",n,q);
int *ptr = new int[n];
int** arr = &ptr;
for (size_t i = 0; i < n; i++) {
u_int size = 0;
scanf("%d",&size);
printf("1 entered size %d & i=%d\n\r",size,i);
if(size<0 || size>(3*pow(10,3))){
return 0;
}
printf("2 entered size %d & i=%d\n\r",i);
arr[i] = new int[size];
printf("3 entered size %d & i=%d\n\r",i);
for(size_t j=0; j< size;j++){
printf("4 entered size %d & i=%d & j=%d\n\r",i,j);
int val = 0;
scanf("%d",&val);
printf("5 entered size %d & i=%d & j=%d & entered Val=%d\n\r",j,val);
arr[i][j] = val;
}
}
int* output = new int[q];
for (size_t i=0; i< q;i++){
unsigned int a=0,b=0;
cin >>a >>b;
output[i] = arr[a][b];
}
for(size_t i=0; i< q;i++){
cout <<output[i]<<endl;
}
return 0;
}
这个程序的输出是:
2 2
entered 2 & 2
3 1 2 3
1 entered size 3 & i=0
2 entered size 3 & i=0
3 entered size 3 & i=0
4 entered size 3 & i=0 & j=0
5 entered size 3 & i=0 & j=0 & entered Val=1
4 entered size 3 & i=0 & j=1
5 entered size 3 & i=0 & j=1 & entered Val=2
4 entered size 3 & i=0 & j=2
5 entered size 3 & i=0 & j=2 & entered Val=3
5 1 2 3 4 5
1 entered size 5 & i=1
2 entered size 5 & i=1
3 entered size 5 & i=1433835216
4 entered size 5 & i=1433835216 & j=0
5 entered size 5 & i=1433835216 & j=0 & entered Val=1
问题在于 printf 中“i”的值。
2 entered size 5 & i=1
3 entered size 5 & i=1433835216
4 entered size 5 & i=1433835216 & j=0
程序中“i”的值在以下位置发生了变化。有人能解释一下为什么“i”的值在内存分配后发生了变化?
printf("2 entered size %d & i=%d\n\r",i);
arr[i] = new int[size];
printf("3 entered size %d & i=%d\n\r",i);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)