Вопросы в С/С++
TARAKAN:
Код:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'G:\Program Files\Agnitum\Outpost Firewall\wl_hook.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Как исправить ? Переставить ОС не выход из ситуации =\
З.Ы. Темы по типу такой как я создал не нашел.
(Отправлено в: Ноября 25, 2007, 18:48:11)
Код любой ... пробывал даже
просто
Код: (cpp)
#include<stdio.h>
void main (){
printf("dwdaww");
}
выдает ошибку эту
(Отправлено в: Ноября 25, 2007, 19:28:17)
Microsoft Visual C++ 6.0
ХП Проф СП2
(Отправлено в: Ноября 25, 2007, 19:44:47)
Просто все нормально работало, ничего не делал с этими файлами, а начало выдавать ошибку =\
От чего может такое произойти ? На будущее просто чтоб знать ...
(Отправлено в: 25 Ноября 2007, 19:10:02)
Код: (c)
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
float *max(float *mas,int n,float sred){
int i,j;
float max,maxo,*a;
//всякие вычисления, потом
*a=max;
return (a);
}
void main (){
float *mas,*a,sred,max,imax,jmax;
int i,j,n;
printf("vvedite n\n");
scanf("%d",&n);
create(&mas,n);
sred=sredarif(mas,n);
[color=red]a=max(mas,n,sred);[/color]
}
Цитировать
G:\Prog\lab\04\04.CPP(58) : error C2064: term does not evaluate to a function
Ругается на строчку выделеную. Программа не полная, удалил функции, которые на 100% правильные, чтоб сильно большой не была.
Написал программу поменьше для проверки перд этим, но без передачи данных.
Код: (c)
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
float *qwe(){
float *a,max=10;
*a=max;
return(a);
}
void main (){
float *a,n1;
a=qwe();
n1=*a;
printf("%f",n1);
}
Она работает.
Не пойму в чем ошибка ...
Polyakov:
Цитата: TARAKAN от Ноябрь 25, 2007, 10:02:40
Код: (cpp)
float *max(float *mas,int n,float sred){
int i,j;
float max,maxo,*a;
//Some calculus, then
*a=max;
return (a);
}
Область жизни и видимости локальных переменных обычно программный блок.
Говорю "обычно" потому что С++ посути дела является не совсем стабильным языком, выполнение программного кода которого зависит от многих факторов.
В вашем случае Вы указателю присваиваете адрес локальной переменной
*a=max;
а потом пытаетесь вернуть переменную "а", которая одновременно является и переменной "max", которая по окончанию выполнения программного блока (функции "float *max(float *mas,int n,float sred)" ) автоматически освобождается в памяти ( то есть говоря более понятным Вам языком уничтожается).
Получается что передается то, чего в момент передачи уже нет!!
Кроме того имя функции "*max" и тут же имя описанной переменной в данном программном блоке "float max," !!!
Никогда не перестаюшь удивлятся многообразию проявления абсурдных ситуаций которые пропускает компилятор С++.
Alder:
Цитата: Polyakov от Ноябрь 25, 2007, 10:46:02
В вашем случае Вы указателю присваиваете адрес локальной переменной
*a=max;
а потом пытаетесь вернуть переменную "а", которая одновременно является и переменной "max", которая по окончанию выполнения программного блока (функции "float *max(float *mas,int n,float sred)" ) автоматически освобождается в памяти ( то есть говоря более понятным Вам языком уничтожается).
Получается что передается то, чего в момент передачи уже нет!!
Бред! Оператор return затем и используется, чтобы вернуть значение из функции. Он копирует значение переменной а в область памяти, отведенную для возвращаемого результата функцией max.
Цитата: Polyakov от Ноябрь 25, 2007, 10:46:02
Никогда не перестаюшь удивлятся многообразию проявления абсурдных ситуаций которые пропускает компилятор С++.
Потому что в языке С/С++ головой должен думать программист, когда пишет небезопасный или непонятно как работающий код.
Цитата: Polyakov от Ноябрь 25, 2007, 10:46:02
Говорю "обычно" потому что С++ посути дела является не совсем стабильным языком, выполнение программного кода
Язык на котором написаны ОС для военных компьютеров является не совсем стабильным? Язык, который является основным в мире системного программирования и на нем пишут даже под микроконтроллеры с 512 байт памяти является не совсем стабильным? Я удивлен.
TARAKAN:
Polyakov
С название функции действительно не заметил ::)
Идея состояла в том, что если структуры нельзя использовать, а надо передать сразу несколько значений из функции, записать переменные в область памяти на которую ссылается указатель...
т е чтото типа такого
Код: (cpp)
*a=i;
a++;
*a=j;
a++;
*a=*(mas+i*n+j);
потом передать указатель обратно в программу....
С этим разобрался ... работает, коректно или нет попоже проверю вручную :)
Вот еще проблема появилась
Код: (cpp)
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
Код: (cpp)
void create(float **mas, int n) {
int i,j;
*mas=(float*)malloc(n*n*sizeof(float));
randomize ();
for (i=0;i<n;i++)
{ printf("\n");
for (j=0;j<n;j++)
{
*(*mas+i*n+j)=random(2001)-1000;
printf("%.2f ",*(*mas+i*n+j));
}
}
}
Цитировать
G:\Prog\lab\04\04.CPP(8 ) : error C2065: 'randomize' : undeclared identifier
G:\Prog\lab\04\04.CPP(13) : error C2065: 'random' : undeclared identifier
Почему может не работать рандом ? ???
EvilMax:
Polyakov, ошибка не в этом. Если в том месте, где стоит непонятный комментарий //а здесь всякие вычисления, будет корректно отводиться память под указатель * a, то присваивание разыменованному указателю и возврат return'ом его копии совершенно правомерен, что сказал Alder.
Что касается "абсурдных" ситуаций, то это не относится к данному случаю. Никто и ничто не мешает объявить внутри функции одноименную переменную. Но в результате мы не сможем использвать рекурсию, так как имя функции будет перекрыто и недоступно. Это нехорошо, программиста надо "бить по рукам" и учить, но это не ошибка.
А вот в функции main() переменная с именем max перекрыла функцию max(). И зря вы ругаете компилятор, он это не пропустил, о чем свидетельствует ошибка Visuall C++ C2064.
Навигация