2010-05-19 2 views
2

Для этого кода:"неявная декларация" предупреждение

int i=0; char **mainp; 
for(i=0;i<2;++i) 
{ 
    mainp[i]=malloc(sizeof(char)*200); 
    if(!scanf("%[^#],#",mainp[i])) 
     break; 
    if(i<2) 
     scanf("%[^#],#",mainp[i]); 
} 

GCC выдает предупреждение:

warning: implicit declaration of function ‘scanf’ 
warning: incompatible implicit declaration of built-in function ‘scanf’ 
warning: ‘mainp’ may be used uninitialized in this function 

И я получаю ошибку сегментации во время выполнения

входа: (P> Q) , (Q> R), - R # -P выход: (P> Q), (Q> R), - R (гнездо э.п.)

я ожидал, чтобы дать мне (P> Q), (Q> R) - R -P // где я должен исправить в моем коде, так что он дает мне ожидать // выводим

+0

возможно дубликат [Почему я получать предупреждение каждый раз, когда я пользуюсь malloc?] (http://stackoverflow.com/questions/1230386/why-do-i-get-a-warning-everytime-i-use-malloc) – sepp2k

ответ

10

Проблема # 1:

предупреждение: «mainp» может быть использовано неинициализированным в этой функции

Вам необходимо выделить память для массива массивов первой.

char **mainp = malloc(sizeof(char*)*2); 

Проблема № 2:

предупреждение: неявная декларация функции 'Scanf'
предупреждение: несовместимо неявное объявление встроенной функции 'зсапЕ'

вы необходимо указать stdio.h в верхней части файла:

#include <stdio.h> 

Проблема № 3: (не входит в ваши компиляции предупреждений)

Не забудьте освободить обе выделенные элементы массива, а также массив адреса массива.

1

GCC ожидает эту строку в начало файла:

#include <stdio.h> 

и декларации mainp, как этот:

char *mainp[2]; 
0

Вы не должны использовать функции, не объявляя их; вы использовали scanf, но ни в одном из ваших кодов не указан scanf. Так как это стандартная функция библиотеки он заявил в одном из стандартных заголовков, stdio.h, так что вам просто нужно включить его:

#include <stdio.h> 

Брайан answer хорошо для другой части

Смежные вопросы