我目前做了一些大學工作的C +分配釋放內存(真正的C,只是交換malloc和free的new和delete)。問題在於,即使指針指向該內存空間,編譯器也會重新分配函數中分配的內存,從而在嘗試訪問所述結構字段時導致分段錯誤。下面(簡化的例子)代碼:C++(編譯器?)在功能上
P.S:我編譯與-oG C++ 2003的標準。
main.cpp中:
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
struct Usu{
long unsigned int DNI;
char Correo[30];
char Nombre[30];
char Foto[20][20];
char *publicaciones;
long unsigned int *amigos;
struct Usu *next;
};
typedef struct Usu Usuario;
void RegistrarU(Usuario *);
void InsertarUsuario(Usuario *, char *, char *, long unsigned int, Usuario *);
int main (int argc, char *argv[]) {
Usuario * baseDatos = NULL;
RegistrarU(baseDatos);
}
void RegistrarU(Usuario * baseDatos)
{
long unsigned int AuxDNI = 34212345;
char AuxNombre[30] = "Hello";
char AuxCorreo[30]= "World";
Usuario *aux = NULL;
InsertarUsuario(baseDatos, AuxCorreo, AuxNombre, AuxDNI, aux);
cout<<baseDatos->DNI; //Doesn't work here
system("pause");
}
void InsertarUsuario(Usuario * baseDatos , char * AuxCorreo,char * AuxNombre,long unsigned int AuxDNI, Usuario * aux)
{
baseDatos = new Usuario;
baseDatos->DNI = AuxDNI;
strcpy(baseDatos->Nombre,AuxNombre);
strcpy(baseDatos->Correo,AuxCorreo);
baseDatos->next = NULL;
cout<<baseDatos->DNI; //Works Here
system("pause");
return;
}
C編程。您應該瞭解構造函數,類和對象。它會簡化事情。 – Matt