Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Redim Preserve In C++

Posted on 2004-08-02
19
Medium Priority
?
1,349 Views
Last Modified: 2008-01-09
int i=0;
int *Arr_UserId;
...
while(!rs->ADOEOF)
{
      Arr_UserId = new int[i]; //MUST PRESERVE
      Arr_UserId[i] = rs->Fields->GetItem("FK_UserId")->GetValue();
      i+=1;
      rs->MoveNext();
}

Arr_UserId = new int[i]; do not preserve data. For example Arr_UserId[0]=1234 When i loop again Arr_UserId[0]=will contain nothing and Arr_UserId[1] will contain data.

How can i preserve data?

0
Comment
Question by:mammouth
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 6
  • 4
  • +1
19 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 11696352
>>Arr_UserId = new int[i]; //MUST PRESERVE

is incorrect since 'i' is '0' at that moment. Allocate the right size and you won't have problems.
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11696377
I think will be better to use a template array from C++ (or MFC if working in Visual C++). Them have a good memory management and easy array grow without loss.
0
 
LVL 1

Author Comment

by:mammouth
ID: 11696427
jkr: i can't allocate the right size because it come from database and i need to use adopenforwardonly.

0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 1

Author Comment

by:mammouth
ID: 11696434
jaime_oliviares: How can i use those template?
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11696482
please specify your compiler and Operating System first.
0
 
LVL 1

Author Comment

by:mammouth
ID: 11696493
Windows XP and c++7 under .net
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11696616
Ok, that will be easier. To store an array of integer, just use CUintArray or CDWordArray classes

CUIntArray array;

To add an element:
array.Add(val);   <-- Add i value to the end of array, array grows automatically

To retrieve an element:
val = array.GetAt(43):  <--- Retrieve the value of 43th element

To change an element:
val = array.SetAt(43, v):  <--- Change the value of 43th element

To obtain array size:
size = array.GetSize();

To manually resize array:
array.SetSize(newSize);
0
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 11696634
Then, use a vector<int> instead, e.g.

int i=0;
vector<int> Arr_UserId;
...
while(!rs->ADOEOF)
{

    Arr_UserId.push_back( rs->Fields->GetItem("FK_UserId")->GetValue());
    i+=1;
    rs->MoveNext();
}
0
 
LVL 22

Expert Comment

by:grg99
ID: 11696658
How big can the array possibly get?  

If it's upper bound is less than say 100 or so, a fixed size array is probably simpler/faster than any fancy variable size array folderol.

 
0
 
LVL 1

Author Comment

by:mammouth
ID: 11696667
upper bound may be up to 10,000
0
 
LVL 1

Author Comment

by:mammouth
ID: 11696706
jaime_olivares: i ger error:  error C2065: 'CUIntArray' : undeclared identifier
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11696792
OK, this is the problem:
CUIntArray belongs to Visual C++ MFC library, so I guess you are trying to compile a console application. The best way to support MFC is creating a new Project -> Win32 Console Application, and choose "An application that supports MFC" in the dialog. After that you will be able to use CUIntArray.
If you don't want to use MFC at all, you can use standard C++'s vector<> template as detailed by jkr, but I think it is a bit more complicated for a begginer. That's why I suggested you CUIntArray.
0
 
LVL 1

Author Comment

by:mammouth
ID: 11696826
jaime_olivares: i added #include <afxcoll.h> at top of program to be able to use CUIntArray.
Now it's ok but when i do array.Add(1);, i get error...

ClientCom error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in libcpd.lib(newop.obj)
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11696858
Your #include allows you to compile, because CUIntArray is declared at afxcoll.h, but your project is not liking MFC library correctly. So, maybe you can follow my recommendation. Please specify your type of project (console, windows, etc...)
0
 
LVL 86

Expert Comment

by:jkr
ID: 11696876
Why not using a vector<int>? All you need is

#include <vector>
0
 
LVL 1

Author Comment

by:mammouth
ID: 11696917
jkr: How can i retrieve value in a vector?
may i use Arr_UserId[5] for example?

This seem to not work?
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11696948
You can use array.GetAt(43) or array[43] using MFC arrays.
 
0
 
LVL 86

Expert Comment

by:jkr
ID: 11696982
>>may i use Arr_UserId[5] for example?

Sure,

int n =  Arr_UserId[5];

will just work fine.
0
 
LVL 1

Author Comment

by:mammouth
ID: 11697000
Sorry, my mistake, working great.

Thankx
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
Suggested Courses

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question