C :: Eliminating Use Of Malloc / Free When Copying Char Arrays
Apr 6, 2014
This program works as expected:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
unsigned long long int address;
float current;
unsigned char pressure_units;
}
[code]....
But I don't like how I had to use malloc and free. Is there a different way to accomplish copying the string into a char pointer without resorting to dynamic memory allocation?
View 1 Replies
ADVERTISEMENT
Nov 5, 2014
There is a part in the lesson that explains how malloc is used to allocate free memory to a pointer and gives us 2 examples:
Code:
float *ptr = malloc( sizeof(*ptr) ); and Code: float *ptr;
ptr = malloc( sizeof(*ptr) );
From my logic in the first case we allocate the memory to *ptr and in the second to ptr.
It's a bit confusing, am I missing something?
View 14 Replies
View Related
Jun 13, 2014
Consider this program:
Code:
// sb_string class v1.04
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct sb_string {
[Code] ....
And here is the output I got:
Code:
[harshvardhan@hari-rudra] ~/Desktop% gcc49 -o test test.c
[harshvardhan@hari-rudra] ~/Desktop% ./test
-before Value of len = 1
(in_function)-before Value of len = 1
(in_function)-after Value of len = 1
-after Value of len = 1 I was trying to make a little easier to work with string. Once the memory is allocated by malloc via sb_init() function, the sb_massacre function wasn't working to deallocate the memory. I had used multiple versions of gcc and clang but the result is same.
View 4 Replies
View Related
Apr 17, 2014
My application calls malloc in multiple subroutines, finally releasing all using free. This is done using my zalloc library (see my other post: [URL] .....
Somehow, when the applications tries to detect the available ammount of memory at the end of the test (allocating, freeing, testing), the freemem function gives me about 4-6MB less memory than at the start of the test? (out of 21MB available on the device at the start).
All memory is allocated and freed using the malloc/free routines within the library, with the exception of the SDL functions, which are registered externally on allocation and release.
View 3 Replies
View Related
Dec 22, 2012
Goal: To allocate some memory as a char*, read in some binary data, re-interpret it as a float* and then free the memory.
My code looks like:
void someFunction(float* &result) {
char * tmp = new char[1000];
//...Fill the char buffer here...
result = (float*)tmp; //Reinterpret binary data as floats
[Code] ....
Is the cast back to char* necessary on the red line (or could I have validly left it as float*)? Would it be different if I had written char * tmp = (char*)malloc(sizeof(char)*1000); on the blue line (and correspondingly used free (char*)floatData on the red line?
View 9 Replies
View Related
Jun 12, 2013
I'm doing a 1Mb memory dump like this:
Code:
for (int i = 0; i < 0x00100000; i++) {
dump[i] = *(chipmemory+i);
} // i
Then I save the 1Mb "dump" array to a file, and the file contains the data I expect.
The problem arises when I try to write data back to the array beginning at the "chipmemory" pointer:
Code:
unsigned char msga[18] = "SOME MODIFIED DATA";
int address = 172378;
for (int i = 0; i < 18; i++) {
*(chipmemory+address) = msga[i];
address++;
} // i
Is this the correct way to write back to an address 172378 bytes from the "chipmemory" pointer? or is my code broken somewhere else?
View 8 Replies
View Related
Jan 6, 2014
I am confused whether 'malloc'ing an array of pointers and pointer to a group of arrays are the same.
Suppose I need an integer pointer to a group of arrays of 2 elements each.
int (*LR)[2];
So to dynamically allocate this pointer for M number of arrays suppose, then what is the correct syntax?
int M;
scanf("%d",&M);
int (*LR)[2];
LR = (int*)malloc(2*sizeof(int));
Whether this is correct??
View 14 Replies
View Related
Oct 16, 2013
I am attempting to change a character in a character array.In the code below, there are three attempts to do this. Only the first one will succeed. The last two both segfaults. If I understand correctly, str_one is declared in the heap, and could therefore be manipulated; and in contrast, str_two is declared in the stack and is therefore immutable, thus the segfault, when update it is attempted. However, I understand that using malloc, one is able to assign a pointer and allocate space in heap memory. Thus, I should be able to manipulate the assigned variable str_three. Doing so, however, results in a segfault.
Code:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char const* argv[])
{
char str_one[4092] = "This is string number one";
char * str_two = "This is string number two";
[Code]...
View 2 Replies
View Related
Sep 29, 2014
I am trying to concatenate two words from a file together. ex: "joe" "bob" into "joe bob". I have provided my function(s) below. I am somehow obtaining the terminal readout below. I have initialized my memory (I have to use dynamic, dont suggest fixing that). I have set up my char arrays (I HAVE TO USE CHAR ARRAYS (c-style string) DONT SUGGEST STRINGS) I know this is a weird way to do this, but it is academic. I am currently stuck. My file will read in to my tempfName and templName and will concatenate correctly into my tempName, but I am unable to correctly get into my (*playerPtr).name.
/* this is my terminal readout
joe bob
<- nothing is put into (*playerPtr).name, why not?
joe bob joe bob
seg fault*/
/****************************************************************/
//This is here to show my struct/playerInit
[Code]....
View 2 Replies
View Related
Mar 30, 2014
unsigned char key[32];
139 unsigned char rfseed[32];
173 f = fopen("/dev/urandom","rb");
174 fread(key,1,32,f);
175 fread(rfseed,1,32,f);
I am having problems copying outputs of the above code into other unsigned char other[32]. I need to keep the output of dev/urandom for backup. But, when I try to assign the values by memcpy(other, key, 32), the values do not match. The same problem happens by assigning values index by index in a loop.
View 2 Replies
View Related
Nov 9, 2013
So, as the title says, I'm trying to eliminate false sharing, or, eliminate sharing writes between threads with TBB. The question is how.
Normally I'd make an array whose size is equal to the number of threads, then locally write to a local variable and update the array only at the end of the thread.
But, of course, I cannot seem to get either thread id or total number of threads TBB uses. I found a reference to tbb::enumerable_thread_specific, which as I understand, is supposed to work for exactly this. But as soon as I added it, it hurt performance by ~60% instead of making it better.
How to do this properly? You don't really need to look so hard on how the algorithm works (I don't know either). I know it's not quite right right now due to race conditions, but I'll fix that later. I used a reference implementation that I copied™, and my task is to parallelize it.
The parts where the problem is right now is in red (of course, it's not all problems; it's only a subset of them).
Code:
#include <iostream>
#include <vector>
#include <fstream>
#include <ctime>
#include <algorithm>
[Code] ....
View 11 Replies
View Related
Feb 26, 2014
I wrote a program for class. It did its job, but I want to make it better. The program finds all of the Pythagorean triples between 1 and 100.
As you can see, the program will repeat the same Pythagorean triples but in different orders.
What I want to do is have the program repeat each Pythagorean triple once, regardless of whether the ordering is different. I have tried, but only came up with the solution to solving repetition that is consecutive. But the repetition for Pythagorean triples jump around.
I got stuck on how to eliminate jumping repetitions. I only know how to make it not repeat on consecutive entries.
View 5 Replies
View Related
Feb 25, 2014
I wrote a program that finds the Pythagorean triples for class. It did its job, but I want to make it better. The program below finds all of the Pythagorean triples between 1 and 100.
As you can see, the program will repeat the same Pythagorean triples but in different orders.
What I want to do is have the program repeat each Pythagorean triple once, regardless of whether the ordering is different. I have tried, but only came up with the solution to solving repetition that is consecutive. But the repetition for Pythagorean triples jump around.
E.g., Pythagorean triple (6, 8, 10) appears. Then two Pythagorean triples later, (8, 6, 10) appears.
I got stuck on how to eliminate jumping repetitions. I only know how to make it not repeat on consecutive entries.
I nested one for loop, in another for loop that is nested in another for loop. One for loop for each of the values in the triple. The most nested loop is for the c value in a^2 + b^2 = c^2, and has an if statement: if( ((a*a)+(b*) == (c*c) ) , and then the program prints the numbers.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
unsigned int a, b, c;
char con;
cout << "This program finds the pythagorean triples between 1 and 200.
[code].....
View 5 Replies
View Related
May 11, 2013
I am trying this program for eliminating the vowels from a text.
#include <iostream>
#include <vector>
#include <ctype.h>
bool isVowel(char c, int indx) {
c = tolower(c);
if ((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u'))
[Code] ....
Here is an error while debugging that while trying to match the argument list '(std::istream, std::string).
View 7 Replies
View Related
Dec 29, 2013
lets say I have a char array with four elements but only one char is used, does it write four elements or just one?
View 3 Replies
View Related
Sep 14, 2013
I want to compare alphabetically two arrays. I try this:
char a[10] = "AABC";
char b[10] = "ZABC";
if(a > b) cout << a;
else cout << b;
But it always outputs a. How can I compare char arrays?
View 3 Replies
View Related
Jun 8, 2012
I'm trying to get template specializations working for char * as well as for char[]. I.e. in the following code the last test does not use the specialization and fails:
Code:
#include <string>
#include <iostream>
#include <cstring>
template<typename T1, typename T2>
bool compare(const T1& lhs, const T2& rhs) {
[Code] ....
View 4 Replies
View Related
Mar 21, 2013
how to correctly use realloc on an array of char arrays? Say I want to store strings in arrays (=array of char arrays) and double the size of max. strings (y value):
Code:
int x=200;
int y=10;
char *carray[y];
for (int j = 0; j < y; ++j)
carray [j] = malloc (sizeof(char)*x);}
}
[code]...
fix the realloc part of my code?
View 2 Replies
View Related
Mar 30, 2013
I have most of the code working properly, but I'm having trouble with a certain area. Currently I have multiple 2D arrays. One is a char array and the other is an int array. In the int array I have to find the max number in each column, which I've done. The problem is, I need to print the max number's row in relation to the char array's row.
For example,
Code: int array[2][3] = {60 50 30 0 100 1}
The max numbers are 60, 100, 30.
char array[2][length+1] = {nameOne nameTwo}
How it needs to print:
nameOne has max score of 60.
nameTwo has max score of 100.
nameOne has max score of 30.
I just can't understand how to compare the two arrays in the right way, so it'll know that nameOne is associated with the numbers in row 0 and nameTwo in row 1, etc.
View 1 Replies
View Related
May 29, 2014
I've been experimenting with char arrays and getting user input through different methods.
int main() {
char userInput[21];
/*I understand that over here, a maximum of 20 letters can be input, and only letters before a space will be stored in userInput*/
std::cin >> userInput;
std::cout << userInput << std::endl;
[Code] ....
As I was testing, whenever I would input a single word for userInput (for example "hi"), the program would work as expected: it would output "hi" and I'd be able to input a sentence of sorts for userInput2 (for example "hello world") and have it outputted.
But if I were to input more than one word for user Input (for example "hi how are you"), the program would output "hi" as expected, but it wouldn't let me input anything for userInput2 and would just output the rest of the first input; in this case, "how are you" would be outputted and the program would end. I am not aware of the logic error at play.
View 7 Replies
View Related
Nov 21, 2013
send(sConnect, (userinput, key), 256, 0);
sConnect is already predefined as a socket
Key is a character array of [32]
Userinput is a character array of [256]
How can you send both of them at the same time using the send function without having to create a separate connection?
View 1 Replies
View Related
Nov 16, 2013
I'm having trouble with passing a character array between functions of the same class. I have a function, buildGraph, that calls function getNextLine. The getNextLine essentially just retrieves the next line of an input file and stores it into a "char line[80]". However when I try to use "line" in my buildGraph function, it has nothing in it.
Here's my code:
Class
#define NUMNODES 10
using namespace std;
#pragma once
class Prog3Graph
[Code] ....
View 4 Replies
View Related
Jul 7, 2014
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
/* h(a)=abcab,h(b)=acabcb,h(c)=acbcacb */
void h_i(int i, char *w, char *a, char *b, char *c)
[Code] .....
Above program increases string like this example.
Let say h(0)=01 and h(1)=10 and let say our first string is w=0 h(w)=01, h^2(w)=0110 h^3(w)=01101001..etc.
We have used h map, which is given in the program comment statement. Same thing, program is doing for three letters. These three letters we have passed as argument in h_i function. e.g. h_i(2,w,"a","d","g") function will apply the 3 letter map h(definition is given in commented form in program) 2 times on string w.
In program w=a; and three letters are a, d and g. /* h(a)=abcab,h(b)=acabcb,h(c)=acbcacb */ here b=d and c=g.
Above program gives core dump at free(w2) free(w1). if we remove these free statements then it gives correct answer. But, we want to free w1 and w2 in the above code. How can we make free both w1 and w2 strings?
View 4 Replies
View Related
Feb 24, 2013
how is the best way to free unsigned pointer array allocated with cmallc?
Code:
uint8_t *buf;
buf = cs_calloc(ca->len + 13);
i do like this , but i know this is not quite right , since i got compile warning passing argument 1 of ‘free’ makes pointer from integer without a cast
Code:
for (i = 0; i < ca->len + 13; i++)
{
free(buf[i]);
buf[i] = NULL;
}
free(buf); do i need to free each element of array like above?
View 6 Replies
View Related
Jan 8, 2014
This compiles o.k.:
Code:
int main(void){
char *a;
a = (char*) malloc (100*sizeof(char));
[Code]....
I get an error saying "pointer being freed was not allocated". This happens for free(a), free(*a), free(&a), free(&*a).
So if I no longer need "1234567"... how do I get rid of this memory element?
View 7 Replies
View Related
Mar 16, 2014
I'm trying to free allocated memory for structure. It seems like free() gets only pointer and not regular types . my question is basic and simple – is passing pointer to free() frees the pointer or the variable it points at? or both?
View 2 Replies
View Related