如何在 Visual Studio 2012 Visual c++ 中动态分配内存
How to dynamically allocate memory in Visual studio 2012 Visual c++
我想为大小为"n"的整数数组分配内存。我用过
int *Money = new int[n];
还有
int *Money = (int*) malloc(n*sizeof(int))
但两者都没有奏效。在程序期间,我从文件"Test.txt"中读取并填充数组。但是在调试时,我总是在 Money 数组中看到一个条目(第一个),它的大小为 1。此处的其他动态分配数组也是如此。
我怎样才能让它工作?
#include<cstdio>
#include<cstdlib>
#include<assert.h>
int *Money;
int *Earn;
int *Sorted;
int *R1;
int *R2;
bool *Visited;
int visited;
void TSort(int room, int n);
int main(){
FILE *in=fopen("Test.txt","r");
int n,ind=0,money,r1=0,r2=0;
char room1[7], room2[7];
fscanf(in,"%d",&n);
printf("%dn",n);
Money = (int*) malloc((n+1)*sizeof(int));
Sorted = (int*) malloc((n+1)*sizeof(int));
Sorted[n] = n;
R1 = (int*) malloc(n*sizeof(int));
R2 = (int*) malloc(n*sizeof(int));
Visited = (bool*) malloc((n+1)*sizeof(bool));
Earn = (int*) malloc((n+1)*sizeof(int));
visited=0;
/* In this for loop I read in the input from the said file */
for(int i=0;i<n;i++){
fscanf(in,"%d %s %s",&money, room1, room2);
Money[i]=money;
Earn[i] = -1;
if(room1[0] == 'E')
R1[i] = n;
else{
int j=0;
r1=0;
while (room1[j]){
r1 = 10*r1 + (room1[j]-48);
j++;
}
R1[i] = r1;
}
if(room2[0] == 'E')
R2[i] = n;
else{
int j=0;
r2=0;
while (room2[j]){
r2 = 10*r2 + (room2[j]-48);
j++;
}
R2[i] = r2;
}
Visited[i]=false;
}
/* Reading and initializations end */
Earn[0] = Money[0];
TSort(0,n);
for(int i=0; i<n; i++){
assert(Earn[Sorted[i]] != -1);
int curr=Sorted[i];
int r1 = R1[curr];
int r2 = R2[curr];
int possible = Earn[curr] + Money[r1];
if(possible > Earn[r1]) Earn[r1] = possible;
possible = Earn[curr] + Money[r2];
if(possible > Earn[r2]) Earn[r2] = possible;
}
printf("%dn",Earn[n]);
getchar();
return 0;
}
void TSort(int room, int n){
while(visited<n){
Visited[room] = true;
Sorted[visited] = room;
visited++;
if((R1[room] != n)&&(!Visited[R1[room]])) TSort(R1[room],n);
if(((R2[room] != n))&&(!Visited[R2[room]])) TSort(R2[room],n);
}
return;
}
这是
正常的。变量是指向第一个元素的指针。 IDE 并不真正知道它是一个数组。
在变量上放置一个观察点,并通过像这样向变量附加一个数字来告诉 IDE 您希望查看更多内容。
Money, 5
这应该向您展示分配的前 5 个元素。
如何?我必须凭记忆这样做。
在调试菜单下,您可以打开各种窗口。应该有一个或多个监视窗口。打开其中一个。
转到源代码中的变量,然后双击变量名称。将其拖到监视窗口中并放开。
然后单击"监视"窗口中的变量。编辑该值,以在其后放置逗号 5。按回车键。
这应该可以解决问题。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 动态分配Q_Property变量
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用动态分配将 char* 复制到另一个字符**
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- C++中动态分配的单向链表的赋值运算符 (MS Visual Studio 2015)
- 如何在 Visual Studio 2012 Visual c++ 中动态分配内存
- 需要一个代码来动态分配 >1GB 内存阵列在 Visual Studio C++
- (Visual C++)删除指针后,动态分配内存不是有效的指针