Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Память |
Автор: ___Yuri 5.4.2005, 01:04 |
Программа записывает нечто по нулевому адресу(NULL pointer assignment). Прохожу пошагово - все нормально: по нулевму адресам ничего не записывается и счетчик неизменен((char*)4 and *(char*)0,4m). Вероятно, проблема связана со стеком - но где не понимаю. Какие способы решения данной проблемы известны( Возможно какой -либо еще метод отладки?) ? ![]() |
Автор: UhaMurad 5.4.2005, 12:08 |
___Yuri, что значит ((char*)4 and *(char*)0,4m)? Объясни, пожалуйста |
Автор: _hunter 5.4.2005, 15:19 |
бррр... ну и объяснение... какой счетчик ( и при чем он тут )? + включи CodeGuard ( он должен место показать ) но лучше дай нормальное объяснение |
Автор: ___Yuri 6.4.2005, 10:57 |
UhaMurad В Borland(в крайнем случае старые версии), насколько мне извесно, это нулевой адрес и счетчик соответственно. Обычно если NULL pointer(проверено на собственном опыте) то в месте "вылета" изменяется один из этих параметров. |
Автор: ___Yuri 6.4.2005, 11:08 |
Думаю, что проще привести кусок кода. Место ошибки(первой в крайнем случае) я нашел, но почему именно здесь происходят проблемы не понимаю. Строчка указана внутри кода. Суть кода:читаю строку введенную юзером и сравниваю с ключевыми словами. /*..........*/ char **arr,**buf; char *buf2; /*..........*/ *arr=(char *)malloc(ML); if(*arr==NULL) { printf("Key word memory allocation: %s",strerror(errno)); exit(-1); } *buf=(char *)malloc(ML); if(*arr==NULL) { printf("Key word memory allocation: %s",strerror(errno)); exit(-1); } arr[0]="table"; arr[1]="select"; arr[2]="insert"; arr[3]="from"; arr[4]="where"; arr[5]="delete"; arr[6]="create"; arr[7]="into"; buf2=(char *)malloc(ML); if(buf2==NULL) { printf("Key word memory allocation: %s",strerror(errno)); exit(-1); }; printf("\n Enter the string:"); gets(buf2); buf2=strtok(buf2," "); buf[0]=buf2; printf("buf[0] : %s\n",buf[0]); // ![]() ![]() /*В предыдущей строке происходит "вылет": Null pointer или "переписывание": arr[4] изменяется - почему не понимаю*/ i=1; while(strcmp(buf2,".")!=0) { buf2=strtok('\0'," "); buf[i]=buf2; printf("buf_arr[%d] : %s\n",i,buf[i]); i++; } i--; k=0; for(k=0;k<i;k++) for(j=0;j<NX;j++) { if(strcmp(buf[k],arr[j])==0) mainkey*=p[j]; } /*............*/ |
Автор: Vyacheslav 6.4.2005, 14:18 | ||||
Читаем это (обращая особое внимание на выделенную часть)
И ... смотрим на это
Вопросы еще есть? |
Автор: ___Yuri 6.4.2005, 21:14 |
Vyacheslav, спасибо большое. Вопросов пока больше нет. Возможно Вы также подскажите откуда цитата?(Проблемы с памятью у меня любимые). Спасибо. ![]() |
Автор: _hunter 6.4.2005, 21:50 |
справка билдера ![]() |