2013-07-12 55 views
-4

我試過輸入「aaaaaaa」和「bbbb」不受歡迎的輸出。我的打印功能輸出如「aaabb」。看起來我在這裏的記憶管理不好,但我找不到這個地方。請幫忙。從我的函數,使用malloc

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

void function(char *array[], int size); 
void function2(char *array[], int size); 

int main() 
{ 
    int size = 0; 
    char *array[] = {0}; 
    function(array, 0); 
    size++; 
    function(array, 1); 
    size++; 
    function2(array,2); 
    return 0; 
} 

void function(char *array[], int size) 
{ 
    char word[20] = "0"; 
    scanf("%s", word); 
    int len = strlen(word) + 1; 
    array[size] = (char *)malloc(sizeof(len)); 
    strlcpy(array[size], word, sizeof(len)); 
} 

void function2(char *array[], int size) 
{ 
    for(int x = 0; x < size; x ++) 
    { 
     printf("%s", *array); 
     (array)++; 
    } 
} 

+0

你永遠不會爲變量'array'分配任何空間。 – John3136

+0

@ John3136那麼'char * array [] = {0};'是什麼?問題不同,請參閱發佈的答案。 – 2013-07-12 12:53:35

+0

可能的重複:http://stackoverflow.com/q/17606293或者標題的確切副本更改爲誤導。還有一個:http://stackoverflow.com/questions/17606914/how-to-pass-an-array-of-pointer-to-pointer-to-a-function-in-c ....怎麼能相同的代碼從不同的傢伙發佈? – 0decimal0

回答

2

您原始數組的大小的一個

char *array[] = {0};等於char *array[1] = {0};

再後來嘗試寫入毫無保留的空間array[size]其中大小超過0。

聲明數組爲:

char *array[ 3 ] ; 

呼籲可變lensizeof,爲您提供了變量本身的大小,它持有的價值。

+0

嘗試過,類似的結果:( – user2576449