C++ :: Create A Function That Uses Dynamic Allocated Arrays Instead Of Vectors?
Feb 9, 2014
I'm trying to create a function that uses dynamic allocated arrays instead of vectors because I want to see how they work. Basically, this function asks the user to input how many people they are going to enter followed by their name; then, they enter how many of these people want to register for an ID followed by their phone #.
For example:
"How many customers will you like to enter? " 3 //user inputs 3
Bob Allen //user input
Ellen Michaels //user input
Jane Andrews //user input
I have a struct called Array and I'm to create a function to create a dynamic array that's fill with randomly generated integers from 0 to 50 (inclusive) and a function to destroy the array for freeing its memory. Below the code that I have written so far.
Code:
* Struct */ typedef struct {int *pArray; //the dynamic array int length; //the size of the dynamic array}Array; /* Function to create a dynamic array */ Array *initializeArray (int length) {int i; }
This is probably a very basic question, but I need to create two vectors and then loop through the vectors and output each pair that is found.
The user will input min1 and max1 with step1 for the first vector and min2 and max2 and step2 for the second vector. Then the loops will go through and return the combinations will return each pair of the two vectors.
So if I input min1=1 and max1=10 and step1=1 and same for vector two the return would be:
[1,1] [1,2] . . . [10,10]
This is for part of a homework assignment, but I can't continue on the assignment without first getting this simple part to work.
I need to create a main function with a one dimension dynamic array with float data type. The total number of array elements must be controlled by a user input from the keyboard. Test data is three different lengths 3,6,9 of the array. The lengths have to be set up at run time from users input. I understand how to create dynamic array but not where the user inputs the length of the array. How would I implement this?
Im writing a scientific software where I like to sent a 2D array (5x4) over a named pipe from a server to a client. When im sending a static array (i.e., double res[5][4];), all goes fine and it works perfect, but when I allocate a dynamic array, it provides some nonsense numbers at the client side. I feel it might be caused because I point to a memory that cannot be shared through a pipe. Am I right and how can I pass the dynamic allocated array itself over the pipe.
//Server program
// Create a pipe to send/receive data HANDLE pipe = CreateNamedPipe( "\.pipemy_pipe", // name of the pipe PIPE_ACCESS_DUPLEX, // 2-way pipe -- send and read PIPE_TYPE_BYTE, // send data as a byte stream 1, // only allow 1 instance of this pipe 0, // no outbound buffer
I'm writing a program in which I have to use a matrix to represent a file in code. because it's a file, the size of the matrix is undefined, and therefore the matrix has to be dynamic. I found out that my compiler doesn't like dynamic multidimensional arrays, so I was thinking of this matrix as a dynamic (monodimensional) array of other dynamic (monodimensional) arrays. My program (and thus this example) uses unsigned chars.
I have the following dynamically allocated 2D array:
Code:
int num_rows = 100; int num_cols = 3; double **myArray= (double**)malloc( sizeof(double *) * num_rows); for(i = 0; i < num_rows; i++) { myArray[i] = (double*)malloc( sizeof(double) * num_cols); }
After sorting the array based on the values in column 1,:
Code:
qsort(myArray, num_rows, sizeof(myArray[0]), comp_function); int comp_function(const void* a, const void* b) { double **p1 = (double**)a; double **p2 = (double**)b; double *arr1 = *p1; double *arr2 = *p2;
return arr1[0] - arr2[0]; }
I need to split the array into two halves so that I can pass each separately into another function that accepts a type double ** pointer. What is the most efficient way of splitting the array? Is it possible to keep the original double ** pointer for the first half of the array and then assign a new double ** pointer to the second half of the array?
When I first learned about dynamically allocated arrays in school, I always thought we used them for passing arrays as parameters to functions. But the more I have been practicing coding, I see now that normal arrays can be passed as parameters to functions. So, what is the advantage? Why do we even need them?
I am trying to delete these arrays NumArray1.array and NumArray2.array at the end of my program so that there is not a memory leak. However I always get a double free or corruption error in runtime error with delete[] array_name. I have tried many times to use nullptr, but no matter what my compiler does not recognize it as being declared in the scope of my delete function. (I have commented out the that function for now.)
What is also strange about this is that I can perfectly use delete[] a1.array, which corresponds to NumArray1.array, but any of the other times I have tried to use the command, it has always resulted in syntax or runtime errors. Online resources do not adequately explain this scenario, though I am sure it exists elsewhere. all of my attempted solutions have failed, and I am completely at a loss. how to free the dynamically allocated arrays at the end of my program?
#include <iostream> #include <assert.h> using namespace std; // Define a struct type, each struct type variable has three // member variables: array, capacity, and length. Togther these // three variable represent a partially filled array.
I can't compile this code as I am at work and the computers are security protected, So i''l have to wait until i get home to test this, but I am pretty sure I am wrong. The problem is I have to create two vectors with 10 elements and input random numbers into it, then pick one of the elements of the second vector at random and append it to an element from the first vector at random. This has to be done 10 times and the I am assuming i have to print the 10 results. This is what I have:
#include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { vector<int> random (10);
I am having troubles with dynamic arrays and pointers. All the errors are of that kind. I think when I am assigning malloc to an array we assign to its address.
Code: /*Create an array of genes of the large matrix*/ gene_t gene,gene1,gene2; gene=malloc(INITIAL*sizeof(gene2)); Code: while(...) { if (gene_num==current_size){
i was trying to make a dynamic array in this form :
int x; cin>>x; int ar[x];
my g++ (gcc) compiler on linux refused to create an array without a fixed size , however using the same code on windows on dev-cpp it was complied and executed , also it allowd me to create and use the dynamic array , i thought it was a compiler bug , however when i restarted and returned to g++ it compiled and executed the code although it never did before i tried the code on windows , how can that be and is it dangerous ?
Im trying to create a function that searches my array for a specific string, and then displays that string and the other content associated with it. I'm basically searching for a keyword within an array that has multiple strings with in each element.
I have recently bought a copy of "Jumping into C++" and have come to chapter 14 ( dynamic memory location) and have a question.
On page 153-154 an example of dynamic allocation is given for array's of int. How would the code look like for strings or structs ?
The allocation was given by:
Code: int *growArray (int* p_values, int *size) { *size *= 2; int *p_new_values = new int[ *size ]; for ( int i = 0; i < *size; ++i ) { p_new_values[ i ] = p_values[ i ]; } delete [] p_values; return p_new_values; }
Sample Code I tried to use this for an array of structs but failed completely....
I used the following struct Code:
struct user{ int days; string name; };
and the allocation function (which does not work):
Code: struct user *growarray (struct user *p_values, int *size) { *size *= 2; struct user *p_new_values = new struct user[ *size ]; for ( int i = 0; i < *size; ++i )
Say I have a class called Play now I have a constructor called Play(int, char, int); I create Play play=new Play[2]()//default const Now i want to initialise different values of play objects using play(int char int) Whats the syntax? play[i](vale, value value); ? Its not working..
I started to practice some C++. I use to program in C and a little C++. Anyway, I am writing code that creates a dynamic array. I would like to be able to do something like
galaxyobject[object] -> uniqueid = in the class but I do not think I have it setup right.
Question. 1. Is the code correct? 2. Why can't I use the above line without a compile error or segment fault?
int main() { cout << "ProteusCore Server" << endl;
// create a galaxy system with a certain amount of objects galaxy galaxysystem; galaxysystem.IntializeGalaxy(100);
[Code] ....
I made the code available to see on sourceforge as Proteus 3d Game Engine. It is something I would like to work on.
Do I really need to create a separate pointer to point to dynamic arrays?
T* temp = new T[capacity_ * 2]; T* tIter = &temp; //Do these need to be here? T* dIter = &data; //Or can I use *(temp + i) and *(data + i)? (for unsigned int i = 0; i < size_; i++) { *(tIter + i) = *(dIter + i); }