[C++] Scambio coppia di elementi di un vettore
ciao a tutti, volevo chiedervi cosa sbaglio in questo programma. grazie mille
// Assegnato un vettore di interi di riempimento N, provvedere a scambiare // ogni coppia di elementi. Nel caso di N dispari, la posizione dell’ultimo // elemento resta invariata. #include <iostream> #define dim 100 using namespace std; int main() { int temp, N, A[dim], B[dim]; cout << "Riempimento="; cin >> N; for (int i = 0; i < N; i++) { cout << "Elemento A[" << i << "]="; cin >> A[i]; } cout << "A=["; for (int i = 0; i < N; i++) { cout << A[i] << " "; } cout << "]" << endl; //********************************************************************************************************************************************* for (int i = 0; i < N / 2; i = i + 2) { temp = A[i]; A[i] = A[i + 1]; A[i + 1] = temp; } cout << "A=["; for (int i = 0; i < N; i++) { cout << A[i] << " "; } cout << "]" << endl; system("PAUSE"); return 0; }
Risposte
Hey non conosco il c++ ma vedendo il tuo codice mi sorge una domanda:
se N >100 che succede?
se N >100 che succede?
A parte il dover tenere conto della problematica sollevata da P_1_6, la condizione di fine ciclo deve essere i < N-1 .
Per esempio con \(\displaystyle N=7 \) la condizione viene soffisfatta per \(\displaystyle i = 0, 2, 4 \) mentre ti fermi a \(\displaystyle i = 6 = 7-1 \). Per \(\displaystyle N = 8 \), il valore \(\displaystyle i = 6 \) è invece accettabile.
Succede questo https://en.wikipedia.org/wiki/Buffer_overflow , sempre ovviamente che tu abbia voglia di inserire manualmente più di cento numeri da tastiera
Per esempio con \(\displaystyle N=7 \) la condizione viene soffisfatta per \(\displaystyle i = 0, 2, 4 \) mentre ti fermi a \(\displaystyle i = 6 = 7-1 \). Per \(\displaystyle N = 8 \), il valore \(\displaystyle i = 6 \) è invece accettabile.
"P_1_6":
Hey non conosco il c++ ma vedendo il tuo codice mi sorge una domanda:
se N >100 che succede?
Succede questo https://en.wikipedia.org/wiki/Buffer_overflow , sempre ovviamente che tu abbia voglia di inserire manualmente più di cento numeri da tastiera

Quindi se un software a pagamento viene comprato , aperto e modificato con un buffer overflow nel posto giusto si può causare un Heap overflow. Poi chiuso e reso scaricabile gratuitamente chiunque che sappia della modifica può prendere il controllo dell'intero sistema?
La cosa è un po' più complessa di così. I sistemi operativi hanno delle contromisure per impedire questo tipo di attacchi; seppur non siano sicuramente sufficienti (e non parlo di antivirus e firewall).
Io ho pensato questo:
basta cifrare gli opcodes che partono dall'heap e in caso di istruzioni non aspettate avvertire e bloccare applicazione.
però cifrare=tempo
che ne pensi?
basta cifrare gli opcodes che partono dall'heap e in caso di istruzioni non aspettate avvertire e bloccare applicazione.
però cifrare=tempo
che ne pensi?
Penso di non saperne abbastanza dell'argomento per dare una opinione ragionata. Se ti interessa puoi provare a seguire questo https://www.coursera.org/course/softwaresec ma richiede una conoscenza abbastanza decente del C quindi non saprei dire quanto potresti capire.
grazie
il problema non è conoscere C quello richiede tempo costante mentre l'inglese tempo esponenziale .
Comunque ora do un occhiata con il traduttore.
grazie ancora
P.s. potresti darmi un parere per viewtopic.php?f=15&t=154218
per piacere
il problema non è conoscere C quello richiede tempo costante mentre l'inglese tempo esponenziale .
Comunque ora do un occhiata con il traduttore.
grazie ancora
P.s. potresti darmi un parere per viewtopic.php?f=15&t=154218
per piacere
grazie mille per le risposte.
il programma adesso funziona avendo messo l'uguale, ma ho dovuto cambiare anche il ciclo dello scambio in:
poichè come era impostato prima non mi dava l'ultimo valore.
il programma adesso funziona avendo messo l'uguale, ma ho dovuto cambiare anche il ciclo dello scambio in:
temp=A[N-i-1]; A[N-i-1]=A[i]; A[i]=temp;
poichè come era impostato prima non mi dava l'ultimo valore.