Вопросы в С/С++

(1/47) > >>

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.

Навигация

[0] Главная страница сообщений

[#] Следующая страница