cm - создает массив, sm - выводит, en - ввод количества элементов, uc - удаляет четные числа. Как правило, именно ТРЕТИЙ элемент принимает значения 38, 46 и др. В Чем проблема?
//---------------------------------------------------------------------------
#include <clx.h>
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int *cm(int K){
int *l=new int(K);
int D;
cout<<"Ukazhite maksimalnoe znachenie: ";
cin>>D;
for (int i=0;i<K;i++) *(l+i)=rand()%(D+1);
return l;}
void sm(int *M, int K) {
for(int i=0;i<K;i++) cout<<*(M+i)<<" ";
cout<<endl;}
int en() {
int K;
cout<<"Vash massiv: \nUkazhite kolichestvo elementov: ";
cin>>K;
return K; }
int uc(int *M,int K) {
int n=0;
for(int i=0;i<K;i++)
if((*(M+i))%2!=0) {*(M+n)=*(M+i);
n++;}
M=new int[n];
return (n); }
int main(int argc, char* argv[])
{
srand(time(0));
clrscr();
int k=en();
int *m=cm(k);
sm(m,k);
k=uc(m,k);
sm(m,k);
getch();
return 0;
}

#include <iostream>
#include <ctime>
using namespace std;
unsigned* random(size_t, unsigned short = 9);
void print(unsigned*, size_t);
unsigned* remove_even(unsigned*, size_t&);
int main() {
setlocale(0, "");
srand(static_cast<unsigned>(time(NULL)));
cout > size;
// при желании можно ввести и второй аргумент для максимального размера целого положительного числа
unsigned* a = random(size);
print(a, size);
a = remove_even(a, size);
print(a, size);
if (a) {
delete[] a;
a = NULL;
}
cin.sync();
cin.get();
return 0;
}
unsigned* remove_even(unsigned* a, size_t& size) {
unsigned* tmp = NULL;
if (size) {
if (tmp = new (nothrow) unsigned[size]) {
size_t m = 0;
for (size_t n = 0; n < size; ++n) {
if (~a[n] & 1) {
tmp[m] = a[n];
++m;
}
}
delete[] a;
size = m;
}
}
return tmp;
}
unsigned* random(size_t size, unsigned short max_value) {
unsigned* p = NULL;
if (size && max_value > 1) {
if (p = new (nothrow) unsigned[size]) {
for (size_t n = 0; n < size; ++n) {
p[n] = rand() % max_value;
}
}
}
return p;
}
void print(unsigned* a, size_t size) {
for (size_t n = 0; n < size; ++n) cout
0. В коде есть 2 new и 0 delete. Утечки памяти.
1. Вместо *(M + n) пиши M[ n ] - значит то же самое, а читается легче.
убери какашку в функции uc:
M=new int[n];
на информатику надо было хадить