【发布时间】:2015-06-03 15:19:08
【问题描述】:
我正在编写此代码,但尚未完成。但是在测试添加新联系人功能和打印功能时,我得到了这个奇怪的输出。只要我不添加多个联系人,一切看起来都不错。我在这里做错了什么?
//Libraries:
#include <stdio.h>
#include <stdlib.h>
//Function prototypes
int showMenu(); //Shows user options
//Main function
int main() {
//Variable declerations
int i = 0;
int iOption = 0;
int iContacts = 0;
char *cPhoneBook_name;
int *iPhoneBook_nr;
cPhoneBook_name = (char *) calloc(1, 80 * sizeof(char));
iPhoneBook_nr = (int *) calloc(1, sizeof(int));
do {
//Memory check
if(cPhoneBook_name == NULL || iPhoneBook_nr == NULL){
printf("\nOut of Memory!\n");
return;
}
//Show menu
iOption = showMenu();
switch (iOption) {
case 1: //Add contact
printf("\nEnter name:\n");
scanf("%s", &cPhoneBook_name[iContacts]);
printf("\nEnter number:\n");
scanf("%d", &iPhoneBook_nr[iContacts]);
cPhoneBook_name = realloc(cPhoneBook_name, 80 * sizeof(char));
iPhoneBook_nr = realloc(iPhoneBook_nr, sizeof(int));
iContacts += 1;
break;
case 2: //Modify contact
//Code here
break;
case 3: //Show contacts
for(i = 0 ; i < iContacts ; i++) {
printf("\n%s %d\n", &cPhoneBook_name[i], iPhoneBook_nr[i]);
}
break;
case 4: //Free memory (delete contacts)
free(cPhoneBook_name);
free(iPhoneBook_nr);
break;
}
}while(iOption != 5);//Exit if iOption is 5;
system("clear");
return 0;
}
//Function definition - showMenu()
int showMenu() {
int iOption = 0;
//system("clear");
printf("\n Phone book \n");
printf("------------------------\n");
printf("1. Add new contact.\n");
printf("2. Edit existing contact\n");
printf("3. Show contact(s)\n");
printf("4. Clear phone book\n");
printf("5. Exit\n");
printf("------------------------\n");
printf("Option --> ");
scanf("%d", &iOption);
return iOption;
}
//---------------------------------------------------------
【问题讨论】:
-
给我们看一个这个“奇怪的输出”的例子,否则我们只是在猜测。
-
你为什么分配内存而不往里面放任何东西?
-
你也应该在程序退出前进行释放。
-
您的主要问题是您的 scanf 正在进入未分配的内存。
标签: c