输入后崩溃的伪指针(字符串数组)的伪变量数组?

时间:2014-01-16 15:43:01

标签: c arrays sorting pointers c-strings

我想存储一个字符串数组,计算它们的长度并使用下面提到的算法以长度增加顺序(最小 - >更大)重新排列它们//
交换持有一个相对较大的字符串来替换顺序(当发现另一个分钟时)
我可以使用realloc(),但我还没考虑保护编程

#include <stdio.h>
#include <stdlib.h>

main()
{
    int i,j,N;
    printf("\n Input amount of alphanumericals: ");
    scanf("%d",&N);
        {
            int min;
            char *swap=(char*)malloc(sizeof(char)*150);
            char *A[N],**temp;
            temp=A;
            for(i=1;i<=N;i++){
                printf("\nInput %d element:",i); 
                gets(temp+i);
            }
            free(temp);

    printf("\n\nData [");
    for(i=0;i<N;i++)
        printf(" %s",A[i]);
    printf(" ]\n\n");

    //Ins sort
    for(i=0;i<N;i++){
        min=i;//Assume current is min
        for(j=i+1;j<N;j++){
            //Compare assuming min with current
            if(strcmp(A[j],A[min])<0){
                min=j;
            }
            //If next is min replace in current position
        if(min!=i){
            swap=A[i];
            A[i]=A[min];
            A[min]=swap;
        }   
    }
    free(swap);
    printf("\nAfter insertion point algorithm\n");
    printf("\n\nInsertion Sorted Data [");
    for(i=0;i<N;i++)
        printf(" %s",A[i]);
    printf(" ]");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您尚未为A及其元素分配内存 首先为A分配内存,然后为A的元素分配内存。然后分配temp = A[i]

应该是这样的:

A = malloc(N);
for(int i = 0; i < N; i++)
    A[i] = malloc(150);