C++ :: Pointer Value Seems To Be Affected By Value Preceding It
Apr 23, 2014
In my current workflow I am exporting a 3D model along with various information (vertex colors, UV coordinates e.g.) from Blender through Python. This is stored in a binary file which can be read in C++.
Consider the following code:
Python:
ar = [0, 1, 2, 3, 4]
with open('model.bin', 'wb') as file:
file.write(struct.pack('%si' & len(ar), *ar))
C++:
u32* ar = (u32*) model_bin; //model_bin is already declared externally
for(int i=0; i<5; i++){
printf("%d
", ar[i]);
}
This works! However, my file contains more than just one list of data. It contains a lot of data of different types. I keep track of this with different pointers at the start of each new "element". I.e.:
Right now, everything checks out, except for the first value of my UV textures. Setting it to 0 in my export script makes my C++ application read it as -566558720.
If I export and read the UV coordinate numbers as shorts however, everything works fine.
But it gets better! When I set the value of my last vcol[] element to 0, I can read the written int just fine! Setting the final vcol to 1 makes the first uvco read out as 65578.
I was having problems changing the value of my head node I passed it as an argument as head which would be the address. The parameter was defined as struct node *head. like this
I tried manipultaing pointer values to change head node value but it did not work. I saw some code online which used pointer to pointers(in code below) to change head node value it worked I dont fully understand why. Would like better understanding of why.
Would also like to know why the argument call needed &head instead of just head.
remove = deleteNode(&head,found); opposed to remove = deleteNode(head,found);
I have to write a program to print pascals triangle and stores it in a pointer to a pointer , which I am not entirely sure how to do. I also have to write the file and read it, then create a binary file. Assignment is attached. I am not the best with programming and especially with pointers. I will post my code below.
Code: #include <stdio.h> #include <stdlib.h> void writePascalTriangle(char *fileName, int heightOfTriangle, int **triangle) { FILE *fp; fp=fopen("writePascalTriangle.txt", "w");
I'm making a system like twitter for class called ShoutOut.com I want to be able to get the PublicShoutOut pointer pointed to by the start iterator and assign it to firstShoutOutToDisplay and secondShoutOutToDisplay because I need that in order to pass the pointers to one of my functions. When I step through the debugger the values in start are all default values like "" and so are the values in this->firstShoutOutToDisplay but the message that start points to is being output just fine.
EDIT: got rid of irrelevant code. Am I using the correct syntax to do this?
if (start != finish) { //getting these because a shoutout needs to be passed to the function that displays //options for a shoutout this->firstShoutoutToDisplay = (*start);
const void insertStuff(const void *key, const int value){ // I want to convert the void pointer into one // of three types of pointers(int, string, or double) switch(value){ case 0: int *intPtr = key;
[Code] .....
But this causes an error of: "crosses initialization of int*intPtr"
i have been fiddling with pointers but I don't understand how the proper syntax is written when I want to acces an element of an array through a pointer to a pointer...The code is all mostly just random bs for learning purposes. I marked the problem "// THIS LINE"
This is a sample program that declares a Matrix as a structure with an array as a pointer to a pointer. The following program is supposed to store a matrix in the structure "_Matrix" and later print the matrix just entered but it fails giving me a "segmentation fault". The sample code is given below
Code: #include <stdio.h> #include <stdlib.h> struct _Matrix { int row_size; int col_size; int **mat;
i really don't know why has a error in my code, that pass a pointer of pointer (name of a matrix with 2 dimensions). Here is the source code of a simple example where appears segmentation fault when execute (but compiles normal):
#include <stdio.h> #define LINHAS 3 #define COLUNAS 5 float a[LINHAS][COLUNAS]; void zeros(float **p,float m, float n){ int i,j; for(i=0;i<m;i++)
I need to make a copy of a string that is defined by char *full and copy it into a different pointer defined by char *duplicate. I have written code to do this however it will not work and i cannot figure it out my code is as follows:
char *duplicate = (char *)malloc(strlen(full) + 1); strcpy(duplicate, full); /*Make second version of full*/ char *Ptr = strtok(duplicate, " "); /*Split duplicate up*/
I have a full program written but i know this is where the problem is because i have used printf statements to see where the program fails. I get no errors and it compiles successfully but it hits this point of the program and it just stops and windows automatically shuts down the program.
char *full is pointing to: "To be, or not to be? That is the question: Whether 'tis nobler in the mind to suffer The slings and arrows of outrageous fortune, Or to take arms against a sea of troubles,"
I need to duplicate the string because i need to use strtok but i will need the original string later on so i need an unaltered version.
I wish to know how to traverse or loop through a dynamic 2D array using pointer to pointer as returned by the code above. Like I would in a static T[20][20] 2D array.
I'm trying to call a function via a function pointer, and this function pointer is inside a structure. The structure is being referenced via a structure pointer.
Code:
position = hash->(*funcHash)(idNmbr);
The function will return an int, which is what position is a type of. When I compile this code,
I get the error: error: expected identifier before ( token.
Is my syntax wrong? I'm not sure what would be throwing this error.
I create an instance of a base class (not derived class) and assign it to base class pointer. Then, I convert it to a pointer to a derived class and call methods on it.
why does it work, if there is a virtual table?
when will it fail?
// TestCastWin.cpp : Defines the entry point for the console application.//
error: request for member 'character' in '* ptr', which is of non-class type 'datastructure*' error: request for member 'character' in '* ptr', which is of non-class type 'datastructure*'
These errors are related to " *ptr->character='a'; printf("Ptr: %c",*ptr->character); "
I want to access "character" data inside the structure "trial" by a pointer to pointer "ptr" inside function "function",but I couldn't find a way to do this.
I'm trying to store an array of vectors using a double pointer as a 2D array, but after the first "vector" (column) has been filled, I get a segfault. I correctly included all the libraries needed, and declared all the variables; I am using this function to allocate the space for the array:
double **vec_array(int rows,int clms) /*allocates a double matrix with -rows- rows and -clms- columns */ { int i; double **m;
[Code].....
I get no error while compiling, but when I run the program I get a segfault right after having read the first vector: switching on the check I get in my output just the components of the first vector and then the segfault:
int *ptr; printf("Output: %d %d %d ",sizeof(ptr), ptr, ptr+1);
Output: 4 214734480 214734484 when size of the pointer is the same "4 bytes" whether its a char pointer or a int pointer, but why a char pointer increments 1 where as int pointer increments 4.
So I was playing around with trying to do an integral using pointers. I've written what I'm trying to do already using arrays
Code: #include <stdio.h> #include <math.h> #define RANGE 500 // Final temp = T0 + RANGE int main() { int i, j, h = 1, T0 = 300; float k300 = 148, alpha = -1.25;
[Code] ...
Which works just fine. Instead I want to try to go through it using pointers. Is there a good way to go through the first loop above, something like?
Code: #include <stdio.h> #include <math.h> #define N 501 // Final temp = T0 + N int main() {
Here is a function,which deletes the spaces of a string...
char *removespaces(char *s1) {
Code: char *s2=s1; int i,j=0; for (i = 0; i<strlen(s1); i++){ if (s1[i]!=' ') { s2[j]=s1[i];
[Code] .....
why I have to initialize the pointer *s2 with the first element of the array s1...???If I don't initialize the pointer,or initialize it with something else,I get a segmentation fault...
I was wondering what magic does a * pointer before function actually do? Today our programming teacher asked us to look into it and explain it in the next class!
#include<iostream> using namespace std; int *binary(int []);
Just wondering how you reset a pointer returned from a 'new' command to the first element in an array (currently I'm just using another pointer).
In the code example below the pointer returned gets moved using pointer arithmetic to clear the array. So what would reset the pointer to the first element in the array of characters?
Size = 100; char *data = new char [Size]; // clear array for( int l = 0; l < Size; l++ ) *(data++) = ' '; delete[] data