2014-10-07 2 views
-1

код работает, но есть ошибка. Возвращаемый массив , используя возврат по ссылке this function-> void alloc (int ** array, int size). Что вы думаете об этой ошибке?Распределение динамических массивов в C

#include <stdio.h> 
#include <stdlib.h> 

void memoryys(int **array, int size); 
int main() 
{ 
    int i; 
    int in; 
    int *a1; 

    printf("please number of elements "); 
    scanf("%d",in); 
    alloc(&a1,in); 

    for(i=0;i<in;i++){ 
     scanf("d ",&a1[i]); 
    } 
    free(a1); 

    return 0; 
} 

void alloc(int **array, int size){ 
    int i; 
    *array = (int *) malloc(size*sizeof(int)); 
    if (*array == NULL){ 
     printf("Error\n"); 
     exit(-1); 
    } 
} 
+0

Не отвергни 'malloc' в С. – crashmstr

+0

' зсапЕ ("D", & a1 [I ]); '->' scanf ("% d", & a1 [i]); ' – BLUEPIXY

+0

спасибо, за ваш ответ ... – HUDUT

ответ

1

Вы не указываете адрес переменной в зсапЕ

scanf("%d",input1); 

должен быть

scanf("%d",&input1); 

В общем, лучше использовать fgets для чтения с клавиатуры, чтобы иметь определенный контроль над тем, что вводит пользователь. Затем используйте sscanf для преобразования значения в нужный вам тип.

char line[128]; 
if (fgets(line,sizeof(line), stdin) != NULL) 
{ 
    if (sscanf(line,"%d", &n) == 1) 
    { 
    do something useful 
    } 
    else 
    { 
    puts("invalid input"); 
    } 

} 
+0

спасибо, за ваш ответ ... – HUDUT

+0

@HUDUT - если бы ответ был полезен вы, нажмите его. Если это не так, задайте вопрос или оставьте комментарий. – ryyker

0

С массива в C вы на самом деле просто выделяя непрерывный блок пространства для конкретного типа данных, int в этом случае.

На стек, массив int создается следующим образом:
int array[2][6]; // 2x6, например, 2 массивы 6 целых чисел в каждой (или 2 строк, каждый с 6 колонн)
Концептуально, было бы, возможно, выглядят как строки и столбцы:

 0 1 2 3 4 5 
0 |int|int|int|int|int|int| 
1 |int|int|int|int|int|int| 

На самом деле, в памяти, это просто непрерывный блок пространства, достаточного для 12 int:

|int|int|int|int|int|int|int|int|int|int|int|int| 

Оператор Индекс: [] обеспечивает визуально простой способ доступа к элементам, где, например, ,
массив [1] [3] будет представлять собой 10-й элемент

Для массива, созданного в куче:

int **array=0; 

Во-первых, создать указатели, необходимые (в лице [2]) массив

array = malloc(sizeof(int *) * 2); //provide two pointers 

давая вам указатели [0] & массив [1]

Теперь вы можете выделить Память для каждого из этих указателей: (представлена ​​[6])

array[0] = malloc(sizeof(int)*6); //space for 6 ints 
array[1] = malloc(sizeof(int)*6); //space for 6 ints 

два строки указатели указывают на эти места:

|int|int|int|int|int|int|int|int|int|int|int|int| 
    ^array[0]   ^array[1]  

Давать вам представление 2D массива: array[2][6];.

Не забудьте освободить все, когда закончите, для каждого таНос, должен быть один свободный:

free(array[0]);  
free(array[1]); 
free(array); 
Смежные вопросы