c - 指针和分配问题

时间:2014-06-17 15:40:41

标签: c pointers memory-management

我必须在一段时间内动态分配指针。

char * allocationg_memory(char [] path p) {
    char message[4000];
    char c;
    unsigned int i = 0;
    unsigned int count;
    FILE *f;

    //open the file
    f = fopen(p, "rt");
    count = 0;

    //copy the contain of the file in message
    if (f) {
            while ((c = getc(f)) != EOF) {
                    count++;
                    message[i] = c;
                    i++;
            }

            fclose(f);
    }

    //allocating the memory 
    char *str = (char *) malloc(sizeof (char) * (count));

    if (str == NULL) {
        printf("error allocating memory for string\n");
        exit(1);
    }

    //copy the message
    strncpy (str, message, count);

    return str;
}

void main {
    char * ptr;
    do {
        //my path dynamically changing
        path = path_of_file;
        ptr = allocating_memory(path);
        printf("%s", ptr);
        free(ptr);
    } while (1);
 }

如果我设置ptr = NULL它会给我分段错误,如果我不这样做,如果下一个打印大于previus,则第二个打印在第一个。我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

首先:

  1. 您的初始分配是0字节。
  2. 您正在尝试打印已分配的内容,就像它是一个字符串一样。
  3. 你的循环永远不会结束。

答案 1 :(得分:1)

这对我有用。希望它有所帮助

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

char * allocating_memory(int c) {
    char *str = malloc ( c + 1); // allow an extra for the null
    strncpy ( str, "abcdefghijklmnopqustuvwxyx", c);
    str[c] = '\0'; // make sure the string is null terminated

    return str;
}

int main () {
    char * ptr;
    int counter = 2;
    do {
        ptr = NULL;
        ptr = allocating_memory(counter);
        printf("%s\n", ptr);
        free(ptr);
        counter++;
    } while (counter < 27);
    return 0;
}