Memory Management
Was gibt folgendes Programm aus?
#include<iostream>
#include<vector>
int main() {
int a = 5;
int* b = &a;
int* c = &b;
std::cout << c;
return 0;
}Optionen: Wert von a, Wert von b, undefiniertes Verhalten, kompiliert nicht.
Korrekt: kompiliert nicht.
Was gibt das folgende Programm aus?
#include<iostream>
int main(){
int a = 5;
int* b = &a;
delete b;
std::cout << a;
return 0;
}Optionen: Wert von a, Wert von b, undefiniertes Verhalten, kompiliert nicht.
Korrekt: undefiniertes Verhalten
Was gibt das folgende Programm aus?
#include<iostream>
void foo(int* f, int* g){
*g = *f;
delete f;
}
int main(){
auto a = new int(5);
auto b = new int(2);
foo(a,b);
std::cout << *a;
return 0;
}Optionen: 2, 5, undefiniertes Verhalten, kompiliert nicht.
Korrekt: undefiniertes Verhalten
Was gibt das folgende Programm aus?
#include<iostream>
void foo(int* a, int* b){
b = a;
delete a;
}
int main(){
auto a = new int(5);
auto b = new int(2);
foo(a,b);
std::cout << *b;
return 0;
}Optionen: 2, 5, undefiniertes Verhalten, kompiliert nicht.
Korrekt: 2
Kann ich im allgemeinen bestimmen, was der Wert von *g ist, nachdem ich foo(f,g) für zwei beliebige int* f,g aufgerufen habe, falls ich die Werte *f und *g vor dem Aufruf kenne?
void foo(int* a, int* b){
*b = *a;
delete a;
}Optionen: Ja, Nein
Korrekt: Nein