Основные выглядит, как это и она отлично компилируется, но когда он звонит, чтобы отобразить массив, PTR указывает на что-то пойдет не такПочему массив печати в одном файле, но отсутствующие номера при отправке в другой
#include "tools.h"
#include <iostream>
using namespace std;
int main()
{
short int Arr1[] = { 5, 10 , 20 , 33, 444};
short int Arr2[] = {8, 1, 22, 333, 4, 555, 6, 7777};
short int* nptr ;
short int* ar1 = Arr1;
short int* ar2 = Arr2;
Display(ar1);
Display(ar2);
nptr = Concat(ar1,ar2);
Display(nptr);
}
Это файл, который я получаю мои функции от, дисплей, кажется, отлично работает в течение первых двух массивов и при печати массива в то же время в этом файле
#include <iostream>
using namespace std;
void Display (short int* a)
{
short int ArraySize = *a;
short int num = *a;
for(short int i = 0; i < ArraySize; ++i)
{
num = *(a+i);
cout << num;
cout << " ";
}
cout << endl;
}
short int* Concat(short int* a1, short int* a2)
{
short int ArraySize = *a1 + *a2 + 1;
cout << ArraySize << endl;
short int Arr[ArraySize];
short int num1 = *a1;
short int num2 = *a2;
short int* ptr;
ptr = &Arr[0];
Arr[0] = ArraySize;
for(short int i = 0; i < *a1; i++)
{
num1 = *(a1+i);
Arr[i+1] = num1;
}
for (short int i = 0; i < *a2; i++)
{
num2 = *(a2+i);
Arr[i+*a1+1] = num2;
}
Display(ptr);
return ptr;
}
Тогда из пут выглядит следующим образом
5 10 20 33 444 // this line is fine
8 1 22 333 4 555 6 7777 // this line is fine
14 // fine
14 5 10 20 33 444 8 1 22 333 4 555 6 7777 // the way the array should be printed
14 5 10 20 3448 64 0 0 4736 96 0 0 2096 64 // the way it is printing and I need to fix
Если у кого-то есть какие-либо сведения о том, почему это делается, или что я могу сделать, чтобы исправить это. Мне нужен массив для печати из основной программы, а не из файла.
Я также хотел бы упомянуть, что я довольно новичок в указателях на этом языке.
Почему бы просто не использовать 'std :: vector' и его функции, такие как' insert() 'вместо таких вещей, как' Concat'? Кроме того, 'short int Arr [ArraySize];' недопустим C++, поскольку массивы должны быть объявлены с использованием констант времени компиляции, а не переменных. Плюс 'return ptr;' - вы возвращаете адрес локальной переменной - неопределенное поведение. С этим (C) кодом слишком много ошибок. – PaulMcKenzie
[Фактический пример C++ того, что вы пытаетесь выполнить] (http://ideone.com/gMp6a3) – PaulMcKenzie
Я не могу использовать вектор, я должен использовать указатели и iostream, и это все –