Помогите найти ошибку выхода за пределы выделенной памяти

Тема в разделе "MS Visual C++", создана пользователем FlamedoFF, 29 апр 2009.

  1. FlamedoFF

    FlamedoFF Гость

    Помогите найти ошибку в следующем коде:
    На этапе вхождения в функцию "vvod_vseh", а именно при вводе первой фамилии - выскакивает ошибка памяти. "Память не может быть written."
    Как исправить?
    [codebox]#include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <windows.h>
    struct abonent
    {
    char familiya[20];
    int year, nomer[7], kolvo;
    };
    void vvod_vseh(abonent*, int);
    void vivod_vseh(abonent*, int);
    void sort(abonent*, int);
    void vvod(abonent*, int, int);
    void vivod(abonent*);
    void vivod_s_opred_goda(abonent*, int, int);

    void main(void)
    {
    int god, n, k;
    abonent *p=0;
    printf("Vvedite kol abonentov: \n");
    scanf_s("%d",&n);
    if(n<=0)
    {
    printf("Nevernoe kolichestvo!");
    return;
    }

    vvod_vseh(p,n);

    while(1)
    {
    puts("BBeduTe: 1-BblBOD, 2-COPTuPOBKA,");
    puts("0-Exit. \n");
    scanf_s("%d",&k);
    if(!k)
    break;
    switch(k)
    {
    case 1: vivod(p);
    break;
    case 2: sort(p,0);
    break;
    }
    printf("Vvedite god: \n");
    scanf_s("%d",&god);

    vivod_s_opred_goda(p, n, god);
    }
    }
    void vvod(abonent*p)
    {
    printf("Lastname:\n");
    scanf_s("%s",p->familiya);
    printf("Year:\n");
    scanf_s("%d",&p->year);
    printf("Number:\n");
    scanf_s("&s",p->nomer);
    }

    void vvod_vseh(abonent*p, int n)
    {
    for(int i=1;i<n;i++)
    vvod(&p);
    }

    void vivod(abonent*p)
    {
    printf("%-20s%-20s%-15d\n", p->familiya, p->year, p->nomer);
    }

    void vivod_s_opred_goda(abonent*p, int n, int god)
    {
    int t;
    for(int i=0;i<n;i++)
    {
    t=p.year;
    if(t>=god)
    {
    vivod_vseh(&p,n);
    }
    }
    }
    void vivod_vseh(abonent*p, int n)
    {
    printf("%-20s%-20s%-15d\n", p->familiya, p->nomer, p->year);
    }
    void sort(abonent*p, int n)
    {
    int i,j,k;
    abonent buf;
    for(i=0;i<n;i++)
    k=i;
    for(j=i+1;j<n;j++)
    {
    if(_strcmpi(p[k].familiya,p[j].familiya)>0)
    k=j;
    buf=p;
    p=p[k];
    p[k]=buf;
    }
    }[/codebox]
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Вы не выделили память для массива p
     
Загрузка...
Похожие Темы - Помогите найти ошибку
  1. OlgaZag
    Ответов:
    1
    Просмотров:
    1.292
  2. OlgaZag
    Ответов:
    0
    Просмотров:
    524
  3. Google313
    Ответов:
    0
    Просмотров:
    1.001
  4. Marikd
    Ответов:
    2
    Просмотров:
    1.210
  5. ruivit
    Ответов:
    2
    Просмотров:
    1.330

Поделиться этой страницей